当另一个python调用Tkinter时,无法正确设置该变量
我是python的初学者。我想为另一个python创建一个模块。下面是一个简单的例子。当执行temp3c.py时,我可以得到正确的答案。但是,当我从temp.py调用tpmp3c时,列表框中没有任何项目。看起来可以正确设置变量“a”。但是,它不会传递给Listbox的listvariable。有人能给我一个建议吗?谢谢 temp3.py当另一个python调用Tkinter时,无法正确设置该变量,python,tkinter,Python,Tkinter,我是python的初学者。我想为另一个python创建一个模块。下面是一个简单的例子。当执行temp3c.py时,我可以得到正确的答案。但是,当我从temp.py调用tpmp3c时,列表框中没有任何项目。看起来可以正确设置变量“a”。但是,它不会传递给Listbox的listvariable。有人能给我一个建议吗?谢谢 temp3.py import tkinter as tk class temp3c(): def fun1(): TK3=tk.Tk()
import tkinter as tk
class temp3c():
def fun1():
TK3=tk.Tk()
TK3.title("Teset File")
TK3.geometry('200x300')
tk.Label(TK3, text="Temp3:").pack()
ls=['aa','bb','cc','dd']
a=tk.StringVar()
a.set(ls)
print('t:',a.get())
A=tk.Listbox(TK3, listvariable=a)
A.pack()
TK3.mainloop()
#A1=temp3c
#A1.fun1()
临时工
import tkinter as tk
from temp3 import temp3c
TK=tk.Tk()
TK.title("Teset File")
TK.geometry('250x350')
def TC():
B=temp3c
B.fun1()
nbtb=tk.Button(TK, text='testing', command=TC)
nbtb.pack()
TK.mainloop()
原始答案
我不确定我是否完全理解了这个问题,但在我看来,您需要ls
中A
中的元素。首先,Listbox
类没有得到列表,相反,您必须手动设置Listbox
中所需的每个项目。您可以使用Listbox.insert(索引,元素)
添加对象
因为需要索引号,所以在您的情况下(使用列表时)这样做的一个好方法是使用enumerate()
这将把它们都放在A
中的单独索引中。抱歉,如果这不是你想要的答案,希望它能帮助你
关于你的评论 如果您希望能够传递
temp3c
类a列表以每次显示,您可以这样做,在我的新示例中,我将其作为fun
函数中的参数传递
#temp3.py
class temp3c:
def fun1(items):
TK3=tk.Tk()
TK3.title("Teset File")
TK3.geometry('200x300')
tk.Label(TK3, text="Temp3:").pack()
A = tk.Listbox(TK3)
A.pack()
for i, item in enumerate(items):
A.insert(i, item)
TK3.mainloop()
为此,您需要一种向函数传递列表的方法。您可以硬编码,或者使用像这样的简单用户界面
#temp.py
import tkinter as tk
from temp3 import temp3c
TK=tk.Tk()
TK.title("Teset File")
TK.geometry('250x350')
values = []
def TC():
B=temp3c
B.fun1(values)
def add_value(event=None):
values.append(entry.get())
entry.delete(0, tk.END)
def reset(event=None):
for i in range(len(values)-1, -1, -1):
values.pop(i)
tk.Label(TK, text='Values to add')
entry = tk.Entry(TK)
entry.pack()
add = tk.Button(TK, text='Add Value', command=add_value)
add.pack()
delete = tk.Button(TK, text='Delete Values', command=reset)
delete.pack()
nbtb=tk.Button(TK, text='testing', command=TC)
nbtb.pack(pady=20)
TK.mainloop()
我找到了另一个解决办法 只需将tk对象分配给字符串变量,问题就解决了
a=tk.StringVar(TK3)在尝试制作吉他之前,您可能应该阅读一些关于类和OOP的内容。插入对我来说很有用。谢谢你的帮助!我不知道为什么调用函数时无法传递变量。仅通过temp3.py执行时,带变量(list)的Listbox可用@chen我已经更新了我的答案,这样你就不需要硬编码列表,通过新的示例,你可以让用户输入他们自己的项目,如果他们不满意,就删除它们。希望这有帮助:)@Crawley“Listbox类没有得到一个列表”,它可以通过单独运行第一段代码(取消注释注释掉的行)看到。只使用
Tk
的一个实例,您就不会有问题要解决。
#temp.py
import tkinter as tk
from temp3 import temp3c
TK=tk.Tk()
TK.title("Teset File")
TK.geometry('250x350')
values = []
def TC():
B=temp3c
B.fun1(values)
def add_value(event=None):
values.append(entry.get())
entry.delete(0, tk.END)
def reset(event=None):
for i in range(len(values)-1, -1, -1):
values.pop(i)
tk.Label(TK, text='Values to add')
entry = tk.Entry(TK)
entry.pack()
add = tk.Button(TK, text='Add Value', command=add_value)
add.pack()
delete = tk.Button(TK, text='Delete Values', command=reset)
delete.pack()
nbtb=tk.Button(TK, text='testing', command=TC)
nbtb.pack(pady=20)
TK.mainloop()