Невозможно нажать кнопку tkinter более двух раз - PullRequest
0 голосов
/ 06 августа 2020

Я новичок ie в tkinter и знаю, что иногда делаю: D. Я создал сценарий python, чтобы получить статистику вируса короны из сообщения GitHub ссылка В сценарии более 20 файлов, поэтому я подумал, что мне нужно просто создать один файл для запуска всех других файлов. Итак, какой еще способ сделать это лучше, чем создание пользовательского интерфейса. И вот что я сделал, я использовал tkinter для запуска всех файлов. Если бы они нажали кнопку x, я бы запустил ab c. В итоге я запустил эти файлы, импортировав их в определенном порядке (не знаю, был ли это лучший способ). Итак, вот где я столкнулся с ошибкой. Я точно не знаю, связана ли эта ошибка с тем, как я импортировал свои файлы, или мой код tkinter просто неправильный. Я просто не мог дважды нажать на кнопку. Я запускал свою программу и нажимал кнопку, она работала правильно, а затем в следующий раз, когда я нажимал на ту же кнопку, она просто не работала. Не было ни ошибки, ни вывода. Ничего не случится. Вот мой код:

#Import tkinter
import tkinter as tk
from tkinter import *
from tkinter import simpledialog
tk = tk.Tk()
Max = 190
def RunDeaths():
    #If they click on RunDeaths I will run this function
    #Check if they have already entered a path
    try:
        open('/Users/test/Documents/python/Py_Programs/Hackathon/DeathStats/Info.txt','r')
        from DeathStats import RunAll
    except:
        YourPath = simpledialog.askstring('Countries','''Please Enter Your Path To HACKATHON Folder:
    Example: 
    \"/Users/Name/Documents/python/\" 
    Note: Leave out the HACKATHON folder and you must put a slash at the end''',parent=tk)
    #Write this path to a file call Info.txt
        file = open('/Users/test/Documents/python/Py_Programs/Hackathon/DeathStats/Info.txt','w')
        file.write(str(YourPath)+'\n')
        file.write(str(Max))
        file.close()
        #Run all the files that gather the data for Corona Virus Deaths
        from DeathStats import RunAll
def RunRecoveredCases():
    #If they click on RecoveredCases Run this
    #Check If they had already entered a path
    try:
        open('/Users/test/Documents/python/Py_Programs/Hackathon/RecoveredCases/Info.txt','r')
        from RecoveredCases import RunAll
    except:
        YourPath = simpledialog.askstring('Countries','''Please Enter Your Path To HACKATHON Folder:
    Example: 
    \"/Users/Name/Documents/python/\" 
    Note: Leave out the HACKATHON folder and you must put a slash at the end''',parent=tk)
        file = open('/Users/test/Documents/python/Py_Programs/Hackathon/RecoveredCases/Info.txt','w')
        #Write there path to a file
        file.write(str(YourPath)+'\n')
        file.write(str(Max))
        file.close()
        #Run all the files that gather all the Recovered Cases
        from RecoveredCases import RunAll
#* * Here is where I think I went wrong But Im not sure
Deaths = Button(tk,height = 20, width = 30, text='Run Deaths',command = RunDeaths,highlightbackground='#000000')
Recovered = Button(tk,height = 20, width = 30, text='Run Recovered Cases',command = RunRecoveredCases,highlightbackground='#000000')
Deaths.pack()
Recovered.pack()
tk.mainloop()

Итак, мой вопрос и проблема: почему я не могу нажать кнопку более двух раз? Это случалось со мной раньше, и я не мог это исправить. Любая помощь будет принята с благодарностью. (Если вы хотите запустить мою программу, потому что мое объяснение было недостаточно хорошим, вот репозиторий git хаба GitHub ) Спасибо

1 Ответ

0 голосов
/ 06 августа 2020

Похоже, вы предполагаете, что from RecoveredCases import RunAll будет запускать код в RecoveredCases.py каждый раз, когда он импортируется. Это ложное предположение. Python кэширует импортируемый код.

Правильный способ использования кода в отдельном файле - поместить код в функцию или класс, импортировать функцию или класс ровно один раз, а затем вызвать функцию или создайте экземпляр класса всякий раз, когда вы хотите запустить код.

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