当另一个python调用Tkinter时,无法正确设置该变量

当另一个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()

我是python的初学者。我想为另一个python创建一个模块。下面是一个简单的例子。当执行temp3c.py时,我可以得到正确的答案。但是,当我从temp.py调用tpmp3c时,列表框中没有任何项目。看起来可以正确设置变量“a”。但是,它不会传递给Listbox的listvariable。有人能给我一个建议吗?谢谢

temp3.py

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