0

我已经设置了两个输入框,目标是按下一个按钮并使用范围之外的函数将某种类型的数学应用于输入数字。(我省略了包装和框架代码,因为我认为它与问题无关。)

class class1:
    def __init__(self):
        self.entry1= tkinter.Entry(self.uframe, width=10)
        self.entry2= tkinter.Entry(self.uframe, width=10)

        self.calcButton = tkinter.Button(self.frame, text="Submit", command = self.doMathFunction)

def doMathFunction():
    #what do I put here that allows me to either run a .get on self.entry1 and 2

我考虑过让条目在范围内是全局的,但这会阻止我对它们进行获取?我认为有一种方法可以让最终用户在输入框中输入数字时运行一个事件,因为它在 ktinker 文档中被提及为“需要更多解释”。我不确定最好的方法是什么,我的研究得到了相互矛盾的答案。

谢谢!

4

2 回答 2

2

让您的按钮调用类上的方法,然后调用该方法doMathFUnction,将值传递给它。这样做意味着您的doMathFunc函数不需要了解有关 GUI 内部工作的任何信息。

class class1:
    def __init__(self):
        ...
        self.calcButton = tkinter.Button(..., command=self.doCalc)

    def doCalc(self):
        a = self.entry1.get()
        b = self.entty2.get()
        doMathFunction(a,b)
于 2012-12-14T13:37:30.790 回答
0

如果 doMathFunction必须超出范围,您可以使用 lambda 语句并将变量添加到您的 doMathFunction。

class class1:
    def __init__(self):
        self.entry1= tkinter.Entry(self.uframe, width=10)
        self.entry2= tkinter.Entry(self.uframe, width=10)

        self.calcButton = tkinter.Button(self.frame, text="Submit", command = \
             lambda e1 = self.entry1.get(), e2 = self.entry2.get(): doMathFunction(e1,e2))

def doMathFunction(e1, e2):
    print(e1*e2) # Or whatever you were going to do

通常,在命令语句中使用函数就像声明变量一样,执行函数并将返回语句分配给变量。但是,对于 lambda,其背后的函数仅在调用时执行。

因此,当 calcButton 被推送并调用它的命令语句时,将执行 lambda“函数”(带有 e1 和 e2)。这就像创建一个中间人函数来处理调用。

class class1:
    def __init__(self):
        self.entry1= tkinter.Entry(self.uframe, width=10)
        self.entry2= tkinter.Entry(self.uframe, width=10)

        self.calcButton = tkinter.Button(..., command = self.middleman)

    def middleman(self):
        e1 = self.entry1.get()
        e2 = self.entry2.get()
        doMathFunction(e1, e2)

def doMathFunction(e1, e2):
    print(e1*e2) # Or whatever you were going to do
于 2012-12-15T20:56:19.117 回答