每当我在tkinter中按下按钮时,我需要显示按钮的文本。怎样

2024-06-08 01:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

import tkinter as tk

class Calculator(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master.geometry("300x650")
        self.master.title("GUI Calculator")
        self.pack()

    # CREATE BUTTONS IN A FOR LOOP.
    btnclrs = ["Blue", "Red", "Green", "Red", "Green", "Blue", "Red", "Green", "Blue"]
    self.btns = []
    for i in range(9):
        def callback(self=self, var=i+1):
            self.text.insert(tk.END, var)
            self.text.pack()
        button = tk.Button(text=i+1, fg=btnclrs[i], bg="Black", command=callback)
        button.pack()
        self.btns.append(button)

    self.text = tk.Text(self.master)
    self.text.bind("<Key-Return>", self.multiplication)  # DON'T CALL FUNCTION WHEN BINDING.
    self.text.pack()
    self.text.focus_set()  # ADDED SO BOUND EVENT-HANDLERS WILL BE CALLED.


    operations = ["+", "-", "*", "/"]
    self.ops = []

    for x in range(4):
        self.text.insert(1.0, tk.END)
        self.text.pack()
        buttonz = tk.Button(text=operations[x], fg=btnclrs[i], bg="Black", command=)
        buttonz.pack()
        self.ops.append(buttonz)



    self.output = tk.Text(self.master)
    self.output.insert(1.0, "Output: \n")
    self.output.pack()
    self.master.mainloop()

def multiplication(self, event):  # ADDED event ARGUMENT.
    out = self.text.get('1.0', 'end')
    a = int(out.split("*")[0])
    b = int(out.split("*")[1])
    self.output.delete(1.0, tk.END)
    self.output.insert(1.0, a * b)



if __name__ == "__main__":
    Calculator()

我已经成功地在tkinter屏幕上显示了操作按钮,现在我希望当我按下按钮时,它们实际显示在文本框中

例如,如果我按下乘法按钮“”,并且在文本框中,符号“”应该在文本框中


Tags: textselfmasteroutputdefbuttongreenblue
1条回答
网友
1楼 · 发布于 2024-06-08 01:18:35

这是您的计算器代码,颜色稍加修改,加上小数点,等于字符和错误捕捉。我用计算函数代替了乘法函数,它执行所有常见的数学运算redirect连接您的按钮,您仍然可以使用返回键手动输入数学


import tkinter as tk

class Calculator:

    def grid(self, r = 0, c = 0, s = "nsew", rs = 1, cs = 1):
        return dict(
            row = r, column = c, rowspan = rs, columnspan = cs, sticky = s)

    def redirect( self, f, v ):
        return lambda: f( v )

    def __init__(self):
        self.master = tk.Tk()
        self.master.geometry("357x128")
        self.master.title("GUI Calculator")
        self.master.rowconfigure(1, weight = 1)
        self.master.columnconfigure(0, weight = 1)

        # CREATE BUTTONS IN A FOR LOOP.
        btnclrs = [ "black", "gray10", "gray20", "gray30",
                    "gray40", "gray50", "gray60",
                    "gray70", "gray80", "gray90"] 
        self.btns = []
        self.store = tk.LabelFrame( self.master, labelanchor = tk.N )
        self.store.grid(self.grid( ))
        #self.window = self.text.window_create( "1.0", window = self.store )
        for i, n in enumerate( btnclrs ):
            button = tk.Button(
                self.store, text = i, bg = btnclrs[i], fg = "white",
                font = "Helvetica 12 normal",
                command = self.redirect(self.callback, i ))
            button.grid( self.grid( c = i ))
            self.btns.append(button)

        btnclrs = ["orange", "sky blue", "sea green",
                   "cyan", "magenta", "red"]
        operand = [".", "+", "-", "*", "/"]
        self.ops = []

        for x,n in enumerate( operand ):
            buttonz = tk.Button(
                self.store, text = n, bg = btnclrs[ x ], fg = "black",
                font = "Helvetica 12 bold",
                command = self.redirect(self.callback, n ))
            buttonz.grid(self.grid( c = i+x+1))
            self.ops.append(buttonz)
        buttonz = tk.Button(
            self.store, text = "=", bg = btnclrs[ x+1 ],
            fg = "black", command = self.calculation )
        buttonz.grid(self.grid( c = i+x+2 ))
        self.ops.append(buttonz)

        self.text = tk.Text(self.master, undo = 1, width = 80, height = 4)
        self.text.grid(self.grid( r = 1 ))
        self.text.bind( "<Return>", self.calculation )
        self.text.focus_set()

        self.output = tk.Text(self.master, height = 4, bg = "SystemButtonFace")
        self.output.insert(1.0, "Output: \n")
        self.output.grid(self.grid( r = 2, c = 0 ))
        self.master.resizable(True, False)
        self.master.minsize( 357, 128 )

    def callback(self, var):
        self.text.insert(tk.END, var)

    def calculation(self, ev = None):
        out = self.text.get("1.0", "end")
        self.output.delete("1.0", "end")
        try:
            a = eval( out )
        except (SyntaxError, ZeroDivisionError) as err:
            a = str(err)
        finally:
            self.output.insert("1.0", f"Output: {a}\n")
        self.text.delete("1.0", "end")

if __name__ == "__main__":
    calc = Calculator()
    calc.master.mainloop()

相关问题 更多 >

    热门问题