python3 'Функция типа не повторяется' tkinter - PullRequest
1 голос
/ 08 апреля 2020

Я делаю GUI в python с tkinter, и я хочу сделать +1 для каждого нажатия на кнопки. Это полный код:

import tkinter as tk
from tkinter import *

cat=tk.Button(window, text='Cat', height=2)
cat.config()
cat.pack(fill=X)
cube=tk.Button(window, text='Cube',  height=2)
cube.config()
cube.pack(fill=X)
def printed(event):
    print('Clicked!')
def clickbtn():
    cat.bind("<Button-1>", printed)
    cat.bind("<Button-2>", printed)
    cat.bind("<Button-3>", printed)
    cube.bind("<Button-1>", printed)
    cube.bind("<Button-2>", printed)
    cube.bind("<Button-3>", printed)
clickbtn()

for event in clickbtn:
    x=0
    x=x+1
window.mainloop()

Работает python 3,6 на windows 10.

1 Ответ

4 голосов
/ 08 апреля 2020

clickbtn - это функция, поэтому она на самом деле не повторяется, и все, что она делает, это в любом случае привязывает нажатия кнопок к функции обратного вызова - она ​​не получает никакого события вообще.

Решение здесь довольно просто использовать обратный вызов, который вы связываете с нажатиями кнопок для обновления вашей переменной:

x = 0

def onclick(event):
    global x
    x += 1
    print('Clicked!')


def set_clickbtn_callback():
    for target in (cat, bind):
       for i in range(1, 3):
          btn = "<Button-{}>".format(i) 
          target.bind(btn, onclick)

set_clickbtn_callback()

window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...