如何从顶级组合框中获取用户选择的选项

时间:2019-06-13 12:49:59

标签: python python-3.x tkinter

我是Python和Tkinter的新手,正试图创建一个界面来搜索和绘制数据。我创建了一个非常简单的toplevel窗口,以从combobox获取将要从用户中选择的值。但是,我发现该脚本仅在设置了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!

1 个答案:

答案 0 :(得分:0)

这是有效的代码,应满足您的需求。我删除了导入和一些无效的代码段。

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()