Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从toplevel中的组合框中获取用户选择的选项_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 如何从toplevel中的组合框中获取用户选择的选项

Python 如何从toplevel中的组合框中获取用户选择的选项,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我是Python和Tkinter的新手,当时正在尝试创建一个用于搜索和打印数据的接口。我创建了一个非常简单的toplevel窗口,从用户选择的组合框中获取值。但是,我发现如果设置了comboxlist2.current(0),脚本将只打印列表中的第一项,或者它将不打印任何内容,无论在框中选择了哪一项。我创建了一个示例脚本来测试这一点。如果我单击“搜索和创建”,则返回值可以根据用户在comboxlist1中的选择进行更改,而无论用户在comboxlist2中选择了什么,返回值都将返回“1”。那么,

我是Python和Tkinter的新手,当时正在尝试创建一个用于搜索和打印数据的接口。我创建了一个非常简单的
toplevel
窗口,从用户选择的
组合框中获取值。但是,我发现如果设置了
comboxlist2.current(0)
,脚本将只打印列表中的第一项,或者它将不打印任何内容,无论在框中选择了哪一项。我创建了一个示例脚本来测试这一点。如果我单击“搜索和创建”,则返回值可以根据用户在
comboxlist1
中的选择进行更改,而无论用户在
comboxlist2
中选择了什么,返回值都将返回“1”。那么,我想问一下,问题在哪里,如何解决

提前感谢潜在的建议或解决方案

import tkinter as tk
from tkinter import ttk
from tkinter import *

def root_print():    
    reg_in = comboxlist1.get()
    print(reg_in)   #print the value selected

def on_click():
    tl = Toplevel()
    comvalue2 = tk.StringVar()
    comboxlist2 = ttk.Combobox(tl,textvariable=comvalue2)
    comboxlist2["values"] = ("1","2","3")
    comboxlist2.grid()
    comboxlist2.current(0)  #select the first one as default
    #mm = comboxlist2.get()
    #print(mm)              #print directly
    go(comboxlist2,tl)
    tl.wait_window()
    return

def go(comboxlist2,tl):
    mm = comboxlist2.get()
    Button(tl,text='go', command=lambda:test(mm)).grid()

def test(mm):
    print(mm)       #do the same thing for the comboxlist2

root = Tk()
root.title('search')      #create an interface
root.geometry('+400+200')       #size and position

Label(text='region    ').grid(row=2,column=0)
comvalue1 = tk.StringVar()
comboxlist1=ttk.Combobox(root,textvariable=comvalue1) 
comboxlist1["values"]=("all","africa","asia","australia","canada","europe","mexico","southamerica","usa")
comboxlist1.grid(row=2,column=1)
comboxlist1.current(0)
Button(text='search & create', command=root_print).grid(row=0,column=4)
Button(text='click', command=on_click).grid(row=1, column=4)
loop = mainloop()#go!

这是工作代码,应该能满足您的需要。我已经删除了导入和一些无用的代码段

import tkinter as tk
from tkinter import ttk

def root_print():
    reg_in = comboxlist1.get()
    print(reg_in)

def on_click():
    tl = tk.Toplevel()
    comvalue2 = tk.StringVar()
    comboxlist2 = ttk.Combobox(tl,textvariable=comvalue2)
    comboxlist2["values"] = ("1","2","3")
    comboxlist2.grid()
    comboxlist2.current(0)  #select the first one as default
    tk.Button(tl,text='go', command=lambda: test(comboxlist2.get())).grid()
    tl.wait_window()

def test(mm):
    print(mm)

root = tk.Tk()
root.title('search')      #create an interface
root.geometry('+400+200')       #size and position

tk.Label(text='region    ').grid(row=2,column=0)
comvalue1 = tk.StringVar()
comboxlist1=ttk.Combobox(root,textvariable=comvalue1) 
comboxlist1["values"]=("all","africa","asia","australia","canada","europe","mexico","southamerica","usa")
comboxlist1.grid(row=2,column=1)
comboxlist1.current(0)
tk.Button(text='search & create', command=root_print).grid(row=0,column=4)
tk.Button(text='click', command=on_click).grid(row=1, column=4)
root.mainloop()

这是工作代码,应该能满足您的需要。我已经删除了导入和一些无用的代码段

import tkinter as tk
from tkinter import ttk

def root_print():
    reg_in = comboxlist1.get()
    print(reg_in)

def on_click():
    tl = tk.Toplevel()
    comvalue2 = tk.StringVar()
    comboxlist2 = ttk.Combobox(tl,textvariable=comvalue2)
    comboxlist2["values"] = ("1","2","3")
    comboxlist2.grid()
    comboxlist2.current(0)  #select the first one as default
    tk.Button(tl,text='go', command=lambda: test(comboxlist2.get())).grid()
    tl.wait_window()

def test(mm):
    print(mm)

root = tk.Tk()
root.title('search')      #create an interface
root.geometry('+400+200')       #size and position

tk.Label(text='region    ').grid(row=2,column=0)
comvalue1 = tk.StringVar()
comboxlist1=ttk.Combobox(root,textvariable=comvalue1) 
comboxlist1["values"]=("all","africa","asia","australia","canada","europe","mexico","southamerica","usa")
comboxlist1.grid(row=2,column=1)
comboxlist1.current(0)
tk.Button(text='search & create', command=root_print).grid(row=0,column=4)
tk.Button(text='click', command=on_click).grid(row=1, column=4)
root.mainloop()

你需要一个全局变量或类你是说把comboxlist2作为全局变量?请您详细解释一下好吗?def中的任何更改都应该声明为全局变量,但建议使用calss解决方案。是的,我同意类会更好,但这里我只想知道我哪里做错了。我还试着在“点击”的内部打印“mm”,其值似乎不正确。。所以我认为这可能不是《宣言》的问题?抱歉,这可能是一个很新的问题。您需要一个全局变量或类您的意思是将comboxlist2作为全局变量?请您详细解释一下好吗?def中的任何更改都应该声明为全局变量,但建议使用calss解决方案。是的,我同意类会更好,但这里我只想知道我哪里做错了。我还试着在“点击”的内部打印“mm”,其值似乎不正确。。所以我认为这可能不是《宣言》的问题?对不起,这可能是一个很新的问题。