簡體   English   中英

Python 計算器數值問題

[英]Python calculator value Issue

我正在嘗試在 python 3.8.2 中使用 Tkinter 制作計算器。 我正在嘗試使用for循環制作按鈕。 我做了一個 function 應該打印按鈕的值,但它只打印3 ,這是代碼創建的最后一個按鈕。 我可以修復它嗎?

import tkinter as tk

class Calculator:
    def interface(self):
        self.i = tk.Tk()
        self.i.geometry("700x800")
        self.word = ["789","456","123"]
        self.display = tk.Entry(self.i, text = "", width = 107,bg = "#acd", justify = 
                    "right", bd = 30)
        self.display.grid(row = 0)
        self.f = tk.Frame(self.i)
        self.f.grid(row = 1)
        self.rows = 0
        for i in self.word:
            self.col = 0
                for char in i:
                    but = tk.Button(self.f, text = char, command = lambda: 
                        self.writenum(char), height = 8,width = 16)
                    but.grid(row =self.rows, column = self.col)
                    self.col += 1
                self.rows += 1
        self.i.mainloop()

    def writenum(self,arg):
        print(arg)

c = Calculator()
c.interface()

您可以使用functools.partial來解決您的問題。 除了使用lambda ,您還可以創建一個可調用的對象來填充適當的參數並調用不同的 function。 這是更新的代碼:

import tkinter as tk
from functools import partial


class Calculator:
    def interface(self):
        self.i = tk.Tk()
        self.i.geometry("700x800")
        self.word = ["789", "456", "123"]
        self.display = tk.Entry(
            self.i, text="", width=107, bg="#acd", justify="right", bd=30
        )
        self.display.grid(row=0)
        self.f = tk.Frame(self.i)
        self.f.grid(row=1)
        self.rows = 0
        for i in self.word:
            self.col = 0
            for char in i:
                but = tk.Button(
                    self.f,
                    text=char,
                    command=partial(self.writenum, char),
                    height=8,
                    width=16,
                )
                but.grid(row=self.rows, column=self.col)
                self.col += 1
            self.rows += 1
        self.i.mainloop()

    def writenum(self, arg):
        print(arg)


c = Calculator()
c.interface()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM