Как сделать счетчик tkinter при нажатии на боттон - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в python я пытаюсь сделать счетчик, когда нажимаю на кнопку, но он не работает, как я ожидал

то, что мне действительно нужно, когда я нажимаю на кнопку, добавляется число вроде 1,2 , 3, но это результат 1111111

from tkinter import *

root = Tk()
root.title("Counter")
root.geometry("100x100")

def count():
    c = 0
    c += 1
    entry.insert(0,c)

button = Button(text="Count",command = count,)
label = Label(text="Time")
entry = Entry(root)
label.pack(side = TOP , pady = 5)
entry.pack(side = TOP , pady = 5)
button.pack(side=TOP , pady = 5)
mainloop()

Ответы [ 3 ]

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

Вам необходимо отслеживать значение c, количество кликов - это можно сделать с помощью закрытия, созданного с изменяемым параметром по умолчанию в приведенном ниже примере.

Вам также необходимо удалите текст, отображаемый в записи, перед отображением нового значения:

import tkinter as tk


def count(_c=[0]):   # <-- this creates a closure that keeps track of the number of clicks.
    _c[0] += 1
    entry.delete(0, tk.END)
    entry.insert(0, _c[0])


root = tk.Tk()
root.title("Counter")
root.geometry("100x100")

button = tk.Button(text="Count", command=count)
label = tk.Label(text="Time")

entry = tk.Entry(root)

label.pack(side=tk.TOP , pady=5)
entry.pack(side=tk.TOP , pady=5)
button.pack(side=tk.TOP , pady=5)

mainloop()

В качестве альтернативы вы можете отслеживать значение c, если вы создаете его в global namespace, и объявляете его global в функции.

import tkinter as tk


def count():
    global c
    c += 1
    entry.delete(0, tk.END)
    entry.insert(0, c)


c = 0

root = tk.Tk()
root.title("Counter")
root.geometry("100x100")

button = tk.Button(text="Count", command=count)
label = tk.Label(text="Time")

entry = tk.Entry(root)

label.pack(side=tk.TOP , pady=5)
entry.pack(side=tk.TOP , pady=5)
button.pack(side=tk.TOP , pady=5)

mainloop()
1 голос
/ 29 мая 2020

Ответ очень прост. Вы должны удалить эту строку кода из функции count()

c = 0

и поместить ее в другое место. ПРИЧИНА: Когда вы помещаете c = 0 в функцию count(), значение c сбрасывается до 0. Если вы поместите его в начало программы, оно не будет сброшено, а значение будет только увеличиваться. при нажатии кнопки

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

Это работа, попробуйте:

from tkinter import *

root = Tk()
root.title("Counter")
root.geometry("100x100")
global c

def count():
    global c
    c += 1
    entry.delete(0, 'end')
    entry.insert(0,c)

c=0
button = Button(text="Count",command = count,)
label = Label(text="Time")
entry = Entry(root)
label.pack(side = TOP , pady = 5)
entry.pack(side = TOP , pady = 5)
button.pack(side=TOP , pady = 5)
mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...