关闭命令和更新命令不适用于一个按钮

时间:2020-09-21 21:46:39

标签: python tkinter

因此对于我想要的这个更大的程序,当用户按下按钮时,它将关闭对话框窗口并更新用户输入的所有值。因此,我只有一个按钮可以执行以下两项操作:更新值并关闭程序。但是,尝试将这两个函数结合起来是行不通的,因为当我同时使用这两个函数时,只调用了update()命令,而不是close命令。两者分开工作。有什么办法解决吗?

function postfixEval( postfixArray ) {
        var stack = [];

        for( element of postfixArray){
            console.log("element: " + element);

            if(isNaN(element)){
                var x = stack.pop();
                var y = stack.pop();
                console.log("var x/y: " + x + " " + y + " element: " + element) ;
                if (element == "+"){
                    result = (y+x);
                    console.log("Expected Result: " + result)
                    stack.push(y + x);
                } else if (element == '-'){
                    stack.push(y - x);
                } else if (element == '*'){
                    stack.push(y * x);
                } else if (element == '/'){
                    stack.push(y / x);
                }
            } else {
                stack.push( parseFloat(element) );
            }
        }
        //final check for non numbers within the stack
        var returnValue = null;
        while( stack.length > 0 ){
            console.log( stack );
            var element = stack.pop();  
            if(isNaN(element)){
                continue;
            } else{
                returnValue = element;
            }
        }
        return returnValue;
    }
    
postfixEval(['7.7','7','+']);
    

1 个答案:

答案 0 :(得分:0)

由于您使用lambda,因此可以安全地将()与函数一起使用,因此只需将finish_button更改为:

finish_button = ttk.Button(self.window, text = "Submit Input", command=lambda:[update(),self.window.destroy()])

或者您可以创建一个新功能来为您完成这两项操作,例如:

def both():
    update()
    self.window.destroy()

finish_button = ttk.Button(self.window, text = "Submit Input", command=both)

提示: 另外,不建议将global与OOP一起使用,因此,我建议您更改代码,并在OOP中使用适当的“方法”和self,以获得更好的体验。

这是我认为您的班级应该喜欢的:

class Counter_program():
    def __init__(self):
        self.window = tk.Tk()
        self.window.title("Test")
        
        style = ttk.Style()
        style.configure("BW.TLabel", foreground="black", background="white")
        
        #default unit color
        unitColor = "slategrey"
        boxWidth = 5
        
        # Create some room around all the internal frames
        self.window['padx'] = 5
        self.window['pady'] = 5
        
        self.propeller_frame = ttk.LabelFrame(self.window, text="Propeller", relief=tk.RIDGE)
        self.propeller_frame.grid(row=1, column=1, sticky=tk.E + tk.W + tk.N + tk.S)
        
        #propeller diameter
        self.propellerDiameter_label = ttk.Label(self.propeller_frame, text="Propeller Diameter")
        self.propellerDiameter_label.grid(row=1, column=1, sticky=tk.W + tk.N +tk.S)
        
        self.propellerDiameter_Units = ttk.Label(self.propeller_frame, text="inches",foreground=unitColor)
        self.propellerDiameter_Units.grid(row=1, column=3, sticky=tk.W)

        self.propellerDiameter_entry = ttk.Entry(self.propeller_frame, width=boxWidth)
        self.propellerDiameter_entry.grid(row=1, column=2, sticky=tk.W, pady=3)
        self.propellerDiameter_entry.insert(tk.END, "10")
        
        # Finish button in the lower right corner
        #finish_button = ttk.Button(self.window, text = "Submit Input", command = self.window.destroy)
        self.finish_button = ttk.Button(self.window, text = "Submit Input", command=self.both)
        self.finish_button.grid(row=2, column=2)
        
    def update(self):
        self.propDiameter = self.propellerDiameter_entry.get()

    def both(self):
        self.update()
        self.window.destroy()

希望这可以解决问题,请让我知道是否有任何错误或疑问。

欢呼