繁体   English   中英

无法从 Combobox 中的 Tkinter 中获取所选值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM