我已经写了一个简单的程序与tkinter GUI。整个代码在一个大模块中,我想把它分成两个或三个模块,以将逻辑与GUI分开。下面是示例代码:
main.py:
import gui
inst1 = gui.guitest()
gui.py:
import tkinter, defs
class guitest:
def __init__(self):
win1 = tkinter.Tk()
self.field1 = tkinter.Text(win1)
self.field1.grid(column = 0, row = 0)
self.but1 = tkinter.Button(win1, text='click',
command=defs.getVar)
self.but1.grid(column = 1, row = 0)
win1.mainloop()
defs.py:
def getVar():
captured = str(field1.get(1.0))
我不能让getVar
工作;我想从文本字段中获取值,但尝试不同的解决方案后,我得到的都是名称或属性错误。
有可能让它那样工作吗?或者我的想法是完全错误的?如果是的话,请让我知道怎么做。我想知道这段代码是否有更多的问题。
好了,让我们从头开始,这是你的代码的一个工作示例:
import tkinter
class guitest:
def __init__(self):
win1 = tkinter.Tk()
self.field1 = tkinter.Text(win1)
self.field1.grid(column=0, row=0)
self.but1 = tkinter.Button(win1, text='click', command=self.getVar)
self.but1.grid(column=1, row=0)
win1.mainloop()
def getVar(self):
captured = str(self.field1.get("1.0", tkinter.END))
print captured
inst1 = guitest()
现在,在分解这段代码之前,你应该问问自己,你想要分解的理由是否足够充分。如果你的答案是肯定的(再考虑一下),一种可能的方法是:
# main.py
import gui
inst1 = gui.guitest()
# gui.py
import tkinter
import defs
class guitest:
def __init__(self):
win1 = tkinter.Tk()
self.field1 = tkinter.Text(win1)
self.field1.grid(column=0, row=0)
self.but1 = tkinter.Button(win1, text='click', command=self.getVar)
self.but1.grid(column=1, row=0)
win1.mainloop()
def getVar(self):
defs.getVar(self)
# defs.py
import tkinter
def getVar(guitest_inst):
captured = str(guitest_inst.field1.get("1.0", tkinter.END))
print captured
但是,再一次,在分解像这样的小部件之前要三思……只是说说而已:)