感谢您在我的问题上给予的帮助
我在tkinter中使用Python3,我在tkinter中设置了多个页面,但是我试图调用一个特定的textvariable,它位于一个类中,在一个定义中,我想知道是否可以使用我构建脚本的方式
这是一个相当大的脚本,所以我不想在这里粘贴所有的代码,我希望这将是足够的
基本上,这个类被称为poin(tk.frame),我正在尝试调用
class POPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.entryboxes()
def entryboxes(self):
# Entry boxes + variables
global voucher
voucher = IntVar()
entry_box3 = tk.Entry(self, textvariable=voucher, width=32, bg="lightgreen")
entry_box3.place(x=435, y=151)
我试图通过在类外执行以下操作来调用textvariable:
def do_mssql():
try:
if int(POPage.entryboxes(voucher).get()) > int(maxN):
voucherchktext()
elif int(voucher.get()) < int(minN):
voucherchktext()
else:
sql()
except:
vouchermissing()
但是,它似乎在调用IntVar(),我没有收到任何错误消息(对于Python来说非常新) 基本上,我可以从另一个类(页面)中提取凭证,只需执行int(concreate.get())。 当然,我可以重命名textvariable并以这种方式调用它(我不介意),但如果有任何方法可以解决这个问题,那就太好了
非常感谢您的帮助
比尔
感谢您在pastebin上发布您的全部代码。通过查看您的代码,我可以看到您的类中没有一个真正拥有它们创建的
tkinter
小部件。换句话说,它们没有任何实例变量。我建议进行彻底的重新设计,去掉所有global
变量和对象——在本例中,这是一种主要的代码气味,表明您的设计存在缺陷——没关系,您确实说过您是一名初学者。我在你的代码中也看到了很多好东西!不要一边倒基本上,我建议的变化是:每个框架类都应该拥有它们创建的小部件的所有权。这包括{}、{}、{}和{}等
这提供的主要好处是,框架类的任何实例都有自己的
tk.IntVar
(或任何条目小部件变量,如tk.StringVar
),它不需要与任何其他类共享(您称之为textvariable
)。如果您仔细想想,这是有意义的:每个tk.Entry
小部件都与一个变量对象耦合,该对象跟踪用户为该条目小部件输入的数据-如果您只创建一个全局条目变量,并与所有帧中的所有条目小部件共享它,您可能很容易丢失用户输入的数据-实际上没有理由这样做尝试运行/播放以下代码段:
您有一个main
Application
(在您的示例中称之为Ghost
),它有多个帧(我的示例只有一个帧类,但是Application
有该帧类的两个实例)。每个框架实例都有一个条目小部件和一个唯一的、完全独立的、不同的对应条目变量对象。框架没有理由共享同一个条目变量对象。使小部件和条目变量对象成为其类的实例变量应该完全消除global
变量的使用在我的示例中,如果我需要从类外部访问条目小部件中的值,例如在
main
函数中,您可以说application.frames[0].entry_var.get()
来获取第一帧条目小部件中的值相关问题 更多 >
编程相关推荐