簡體   English   中英

在數組Tkinter中查找小部件

[英]Finding widgets in an array Tkinter

我正在嘗試使用Tkinter,並且鼠標事件應更改所單擊按鈕的文本。

通過測試,這可以與右鍵()和中鍵()一起使用。 但是,(單擊鼠標左鍵)使用了一個函數,該函數應該在數組中找到小部件的“坐標”(我需要這些數字才能用於以后的計算)。 網格的底部行有效,但是其他任何按鈕都將導致右下按鈕被選中。

from tkinter import *
from random import *

win = Tk()
win.geometry("380x410")
win.grid()

buttons = []

def search(event):
    for j in range(10):
        for i in range(10):
            #print(event.widget)
            if buttons[j][i] == event.widget:
                break
    print(i,j)
    buttons[j][i].config(text="1")

for y in range(10):
    temp = []
    for x in range(10):
        button = Button(win,text="",width=4,height=2)
        button.grid(row=y,column=x)
        button.bind("<Button-1>",search)
        button.bind("<Button-2>",lambda event: event.widget.config(text=""))
        button.bind("<Button-3>",lambda event: event.widget.config(text="R"))
        temp.append(button)
    buttons.append(temp)

我已經嘗試過使用lambda,但我認為問題出在函數之內。

任何幫助,將不勝感激。

也許這與您要尋找的東西有些接近:

from tkinter import *
from random import *

win = Tk()
win.geometry("380x410")
win.grid()

buttons = []

def search(event):
    i2 = 0
    j2 = 0
    for j in range(10):
        for i in range(10):
            #print(event.widget)
            if buttons[j][i] == event.widget:
                i2 = i
                j2 = j
                event.widget.config(text="1")
                break
    print(i2,j2)
    #buttons[j][i].config(text="1")

for y in range(10):
    temp = []
    for x in range(10):
        button = Button(win,text="",width=4,height=2)
        button.grid(row=y,column=x)
        button.bind("<Button-1>", lambda event: search(event))
        button.bind("<Button-2>",lambda event: event.widget.config(text=""))
        button.bind("<Button-3>",lambda event: event.widget.config(text="R"))
        temp.append(button)
    buttons.append(temp)

win.mainloop()

問題 :在數組Tkinter中查找小部件

更簡單的解決方案

import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        for y in range(10):
            for x in range(10):
                button = tk.Button(self, text="", width=4, height=2)

                button._coords = x, y

                button.grid(row=y, column=x)
                button.bind("<Button-1>", self.on_button_1_click)

    def on_button_1_click(self, event):
        print('on_button_1_click:{}'.format(event.widget._coords))


if __name__ == '__main__':
    App().mainloop()

您確定需要按鈕列表中的坐標還是按鈕的索引?

如果只需要與每個按鈕進行精確交互,請嘗試使用lambda中的索引值。

from tkinter import *

win = Tk()
win.geometry("380x410")
buttons = []


def search(btn, ndex):
    if btn == '1':
        buttons[ndex].config(text='1')
    if btn == '2':
        buttons[ndex].config(text='')
    if btn == '3':
        buttons[ndex].config(text='R')


for y in range(10):
    for x in range(10):
        buttons.append(Button(win, text="", width=4, height=2))
        ndex = len(buttons) - 1
        buttons[-1].bind("<Button-1>", lambda e, z=ndex: search('1', z))
        buttons[-1].bind("<Button-2>", lambda e, z=ndex: search('2', z))
        buttons[-1].bind("<Button-3>", lambda e, z=ndex: search('3', z))
        buttons[-1].grid(row=y, column=x)

win.mainloop()

暫無
暫無

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

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