[英]Unable to get selected value from Combobox in Tkinter
我正在运行一段简单的代码,其中每当从 combobox 中选择一个值时,都需要在终端中打印出来。 但是每当我 select 一个值时,在按下退出按钮后,它就不会在终端上打印出来。
任何微调将不胜感激。
感谢您的帮助
from tkinter import *
from tkinter import ttk
win = Tk()
win.geometry("200x100")
vals = ('A','B','C','CD','E','FG')
current_var= StringVar()
cb= ttk.Combobox(win, textvariable = current_var)
cb['values']= vals
cb['state']= 'readonly'
cb.pack(fill='x',padx= 5, pady=5)
IP = current_var.get()
Button(win, text="Quit", command=win.destroy).pack()
win.mainloop()
print(IP)
如果您希望退出按钮打印该值,请将其更改为类似这样的内容。
from tkinter import *
from tkinter import ttk
def get_value():
IP = current_var.get()
print(IP)
win.destroy()
win = Tk()
win.geometry("200x100")
vals = ('A','B','C','CD','E','FG')
current_var= StringVar()
cb= ttk.Combobox(win, textvariable = current_var)
cb['values']= vals
cb['state']= 'readonly'
cb.pack(fill='x',padx= 5, pady=5)
IP = current_var.get()
Button(win, text="Quit", command= get_value).pack()
win.mainloop()
print(IP)
@Rory 的回答不太正确,因为最终的print(IP)
只是打印换行符(他可能没有注意到)。 为了修复get_value()
回调 function 应该声明global IP
,所以IP
不再是 function 的本地变量,它的值可以在 function 之外访问。
下面的代码说明了这一点,并且还遵循PEP 8 - Style Guide for Python Code guidelines 比你的问题更接近。
import tkinter as tk # PEP 8 advises avoiding `import *`
import tkinter.ttk as ttk
def get_value():
global IP
IP = current_var.get()
win.destroy()
win = tk.Tk()
win.geometry("200x100")
vals = 'A','B','C','CD','E','FG'
current_var = tk.StringVar(win)
cb = ttk.Combobox(win, textvariable=current_var, values=vals, state='readonly')
cb.pack(fill='x', padx= 5, pady=5)
tk.Button(win, text="Quit", command=get_value).pack()
win.mainloop()
print(IP)
您在创建cb
后立即获得该值,该值应该为空字符串,因为当时没有选择任何项目。 您需要在选择项目后获取该值。
一种方法是在 win.mainloop IP = current_var.get()
win.mainloop()
:
from tkinter import *
from tkinter import ttk
win = Tk()
win.geometry("200x100")
vals = ('A','B','C','CD','E','FG')
current_var = StringVar()
cb= ttk.Combobox(win, textvariable=current_var)
cb['values'] = vals
cb['state'] = 'readonly'
cb.pack(fill='x', padx=5, pady=5)
Button(win, text="Quit", command=win.destroy).pack()
win.mainloop()
IP = current_var.get()
print(IP)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.