[英]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.