如何从另一个模块中的文本字段获取值



我已经写了一个简单的程序与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

但是,再一次,在分解像这样的小部件之前要三思……只是说说而已:)

相关内容

  • 没有找到相关文章

最新更新