Tkinter первый щелчок первой функции, второй щелчок вторая функция - PullRequest
1 голос
/ 28 мая 2020

Я уже давно работаю с tkinter. Я пытаюсь создать приложение на основе кода здесь:
Как показать / скрыть виджеты в Tkinter?

У меня есть две функции toggle_entry и comp_s.
Как я могу запустить toggle_entry + comp_s при первом нажатии кнопки? и когда я нажимаю второй раз, как мне запустить toggle_entry. Когда я нажимаю в третий раз, снова toggle_entry + comp_s, когда я нажимаю в четвертый раз, снова toggle_entry et c. ...

from tkinter import * 
import tkinter as tk

hidden = False
root = tk.Tk()
r = StringVar() 
e = tk.Entry(root, width=6, textvariable=r)
e.grid(row=0, column=1)

def toggle_entry():
    global hidden
    if hidden:
        e.grid()
    else:
        e.grid_remove()
    hidden = not hidden

s = StringVar() 
def comp_s(event):
    global s
    s=r.get() # construct string
    print(s)

tk.Button(root, text='Toggle entry', command=toggle_entry).grid(row=0, column=0)
root.mainloop()

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Вы можете вручную добавить к кнопке атрибут "num_clicked" после ее объявления. Затем, каждый раз, когда выполняется обратный вызов, вы проверяете это и действуете соответствующим образом:

def toggle_entry():
    # First thing is to increment the number of clicks
    button.num_clicked += 1

    # Your codes
    ...

    # At the end, call comp_s depending on the number of clicks
    if num_clicked % 2:
        comp_s(None)

...
# Initialization of the button
button = tk.Button(root, text='Toggle entry', command=toggle_entry)
button.grid(row=0, column=0)
button.num_clicked = 0

if num_clicked % 2 подразумевает «запускать этот блок, только если num_clicked нечетное (например, 1-й щелчок, 3-й щелчок)». Кроме того, мы передаем None в comp_s, поскольку он ожидает аргумент, но можно передать что-либо, потому что это все равно не используется в функции.

0 голосов
/ 28 мая 2020
count = 1
def test_click():
   global count
   count +=1
   if count%2 ==0:
    comp_s()
    toggle_entry()

   else :
        toggle_entry()
tk.Button(root, text='Toggle entry', command=test_click).grid(row=0, column=0)

Я добавлю эту строку под функцию comp_s, с которой она работала.

0 голосов
/ 28 мая 2020

Вы можете сделать что-нибудь вроде этого

count = 0
def test_click():
   global count
   count +=1
   if count%2 ==0:
       toggle_entry()
       comp_s(event)
   else :
        toggle_entry()
tk.Button(root, text='Toggle entry', command=test_click).grid(row=0, column=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...