我是 Tkinter 的新手,作為我的第一個專案,我想創建一個井字游戲。我想創建 9 個按鈕,當我點擊它們時會改變它們的背景影像,問題是我不想為每個按鈕創建一個函式,而是一個函式將把按鈕作為引數并改變它的背景影像.
我寫的代碼:
def play(bid):
if player == "X":
bid.config(image=cross)
if player == "O":
bid.config(image=circle)
b1 = tk.Button(app, text="", image=white, command=lambda id=b1: play(id))
b1.grid(column=0, row=0)
如何將 b1 作為引數傳遞給 play() 函式?謝謝
我嘗試使用 b1 作為 play() 的引數,并使用 play() 更改 b1 的影像。當我嘗試運行此代碼時,我得到“名稱 b1 未定義”。
uj5u.com熱心網友回復:
定義一個函式來創建、配置和系結你的按鈕;然后您的回呼可以關閉參考您的按鈕的必要變數。就像是
def play(bid):
if player == "X":
bid.config(image=cross)
if player == "O":
bid.config(image=circle)
def add_button(app, r, c):
b = tk.Button(app, text="", image=white)
b.config(command=lambda: play(b))
b.grid(column=c, row=r)
return b
for row in [0,1,2]:
for col in [0,1,2]:
# Save the return value somewhere if necessary
addButton(app, row, col)
lambda 運算式包含一個自由變數b,它參考b最近封閉范圍內的變數,這是對add_buttonlambda 運算式求值的呼叫。
uj5u.com熱心網友回復:
一種方法是使用該.config方法將按鈕的創建與分配分開。
b1 = tk.Button(app, text="", image=white)
b1.config(command=lambda btn_id=b1: play(btn_id))
這實際上并不是最好的方法,最好傳遞一些定義按鈕的東西,比如列舉或文本。
b1 = tk.Button(app, text="", image=white, command=lambda : play("b1"))
然后檢查“b1”是否是函式中的輸入,這種方式b1可以重新定義為回圈中發生的情況。
uj5u.com熱心網友回復:
這是我閑暇時寫的,可能有用。只需創建一個檔案夾“圖示”并將 100x100 像素的影像放在那里
from tkinter import *
import random
class Main:
def __init__(self):
self.root = Tk()
#self.root.geometry('900x100')
def run(self):
self.variables()
self.interface()
self.root.mainloop()
def variables(self):
self.PHOTO_COUNTER = 0
self.photo_list = [
PhotoImage(file="icons/bublegum.png"),
PhotoImage(file="icons/fin.png"),
PhotoImage(file="icons/jake.png"),
PhotoImage(file="icons/marcelin.png"),
PhotoImage(file="icons/navel.png"),
PhotoImage(file="icons/winter_king.png"),
]
def interface(self):
self.Buttons = []
for i in range(10):
item = random.choice(self.photo_list)
self.btn = Button(self.root, image=item, command=lambda c=i: self.click(c))
self.btn.pack(fill=BOTH, expand=1, side=LEFT)
self.Buttons.append(self.btn)
def click(self, i):
btn = self.Buttons[i]
item = random.choice(self.photo_list)
btn.config(image=item)
A = Main()
A.run()

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/532214.html
