tkinter.StringVar().get()一直是空值
b文件定义一个下拉框,选中下拉框调用func函数import tkinter as tk
from tkinter import ttk
class Test:
def __init__(self):
self.lst = ['a', 'b']
self.screen = tk.Tk()
self.var = tk.StringVar()
self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
self.combobox.pack()
self.combobox.current(0)
self.combobox.bind("<<ComboboxSelected>>", self.func)
self.screen.mainloop()
def func(self, event):
print(self.var.get())
if __name__ == '__main__':
Test()
b文件自测能正常获取var的值
a文件通过按钮打开b文件的下拉框
import b
import tkinter as tk
def fun():
b.Test()
if __name__ == '__main__':
screen = tk.Tk()
tk.Button(screen, text="测试", command=fun).pack()
screen.mainloop()
选中下拉框时,获取到的var的值都是空值‘’
为什么var获取不到lst列表的值呢,求解
应该是变量的作用域问题,你改成这样即可
import tkinter as tk
from tkinter import ttk
class Test:
def __init__(self):
self.lst = ['a', 'b']
self.screen = tk.Tk()
self.var = tk.StringVar()
self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
self.combobox.pack()
self.combobox.current(0)
self.combobox.bind("<<ComboboxSelected>>", self.func)
self.screen.mainloop()
def func(self, event):
print(self.combobox.get())
if __name__ == '__main__':
Test() 666 Twilight6 发表于 2020-6-29 09:54
应该是变量的作用域问题,你改成这样即可
谢谢大佬
self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢 隐形胶佬 发表于 2020-6-29 10:17
谢谢大佬
self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢
我暂时也没搞明白 我研究研究 隐形胶佬 发表于 2020-6-29 10:17
谢谢大佬
self.var 跟 self.combobox 不应该是绑定在一起的吗,具体是有什么不同呢
import tkinter as tk
from tkinter import ttk
class Test:
def __init__(self):
self.lst = ['a', 'b']
self.screen = tk.Toplevel()# 你是 Tk() 重新创建了个根窗口,导致你 b 代码那打印的是空 ,改成 Toplevel 顶层窗口即可
self.var = tk.StringVar()
self.combobox = ttk.Combobox(self.screen, textvariable=self.var, value=self.lst)
self.combobox.pack()
self.combobox.current(0)
self.combobox.bind("<<ComboboxSelected>>", self.func)
# self.screen.mainloop()这个可以不要,因为你主程序有了这个,一个程序只需要一个mainloop 多余的是没意义的
def func(self, event):
print(self.var.get())
if __name__ == '__main__':
Test() Twilight6 发表于 2020-6-29 11:27
好,我多试试
页:
[1]