Кнопки Tkinter теряют функциональность, когда я вызываю их из другого файла Python ⇐ Python
-
Anonymous
Кнопки Tkinter теряют функциональность, когда я вызываю их из другого файла Python
Я новичок в Tkinter и хочу сделать это для своего проекта в колледже. Я собирался сделать простую программу запуска приложений с калькулятором, часами и приложением для заметок из main.py. Я поискал в Интернете и нашел различные способы импорта других файлов Python. Для этого я использовал init.py.
init.py
из .clock_app импортируйте open_clock из .notes_app импортировать open_notes из .calc_app импортировать open_calc Это код моего основного файла (средства запуска приложений).
из tkinter import Tk,Button, PhotoImage импортировать приложения защита основной(): корень = Тк() #Иконки root_icon = PhotoImage(file="Assets/app_launcher_icon.png") #основные корневые свойства root.title("Средство запуска приложений") root.geometry("700x500") root.resizable(Ложь,Ложь) root.configure(bg="#49de71") root.iconphoto(False,root_icon) #Функции для каждого добавленного приложения #Иконки #Кнопки для открытия каждого приложения Calendar_button = Кнопка (корень, текст = «Часы», команда = Apps.open_lock) Calendar_button.place(x=239,y=5) Calendar_button.config(высота=20,ширина=30) калькулятор_кнопка = Кнопка (корень, текст = «Калькулятор», команда = Apps.open_calc) Calculator_button.config(высота=20,ширина=30) Calculator_button.place(x=472,y=5) корень.mainloop() если __name__ == "__main__": основной() А это код к калькулятору
из импорта tkinter * класс Calc_app: def __init__(я, корень): self.root = корень self.root.title("Калькулятор") корень.уничтожить() # Создаём виджеты для второго окна # отсюда глобальное выражение выражение="" #чтобы обновить выражение в текстовом поле защита нажмите (число): глобальное выражение выражение = выражение + строка (число) уравнение.set(выражение) защита равнопресс(): пытаться: глобальное выражение итог = str(оценка(выражение)) уравнение.set(всего) выражение="" кроме: уравнение.set(" ошибка ") выражение="" защита ясно(): глобальное выражение выражение = "" уравнение.set("") калькулятор=Тк() калькулятор.configure(background="#07398a") калькулятор.геометрия("350x300") калькулятор.resizable(Ложь,Ложь) уравнение = StringVar() выражение_поле = Entry(калькулятор,текстовая переменная=уравнение,ширина=30,шрифт=('Arial', 20)) выражение_field.place(x=0,y=0) button7 = Button(calculator, text='7', fg='black', bg='#4287f5', команда = лямбда: нажмите (7), высота = 2, ширина = 10) button7.place(x=5,y=55) button8 = Кнопка(калькулятор, text='8', fg='black', bg='#4287f5', команда = лямбда: нажмите (8), высота = 2, ширина = 10) button8.place(x=90,y=55) button9 = Button(calculator, text='9', fg='black', bg='#4287f5', команда = лямбда: нажмите (9), высота = 2, ширина = 10) button9.place(x=175,y=55) button4 = Button(calculator, text='4', fg='black', bg='#4287f5', команда = лямбда: нажмите (4), высота = 2, ширина = 10) button4.place(x=5,y=105) button5 = Button(calculator, text='5', fg='black', bg='#4287f5', команда = лямбда: нажмите (5), высота = 2, ширина = 10) button5.place(x=90,y=105) button6 = Button(calculator, text='6', fg='black', bg='#4287f5', команда = лямбда: нажмите (6), высота = 2, ширина = 10) button6.place(x=175,y=105) button1 = Button(calculator, text='1', fg='black', bg='#4287f5', команда = лямбда: нажмите (1), высота = 2, ширина = 10) button1.place(x=5,y=155) button2 = Button(calculator, text='2', fg='black', bg='#4287f5', команда = лямбда: нажмите (2), высота = 2, ширина = 10) button2.place(x=90,y=155) button3 = Button(calculator, text='3', fg='black', bg='#4287f5', команда = лямбда: нажмите (3), высота = 2, ширина = 10) button3.place(x=175,y=155) button0 = Button(calculator, text='0', fg='black', bg='#4287f5', команда = лямбда: нажмите (0), высота = 2, ширина = 10) button0.place(x=90,y=205) plus = Button(calculator, text=' + ', fg='black', bg='#4287f5', команда = лямбда: нажмите («+»), высота = 5, ширина = 11) плюс.место(х=260,у=160) минус = Кнопка(калькулятор, text=' - ', fg='black', bg='#4287f5', команда = лямбда: нажмите («-»), высота = 3, ширина = 11) минус.место(х=260,у=100) умножить = Кнопка(калькулятор, text=' * ', fg='black', bg='#4287f5', команда = лямбда: нажмите («*»), высота = 2, ширина = 22) умножить.место(х=5,у=255) разделить = Кнопка(калькулятор, text=' / ', fg='black', bg='#4287f5', команда = лямбда: нажмите («/»), высота = 2, ширина = 23) #divide.grid(строка=5, столбец=3) разделить.место(х=175,у=255) равно = Кнопка(калькулятор, text=' = ', fg='black', bg='#4287f5', команда = равное нажатие, высота = 2, ширина = 10) #equal.grid(строка=5, столбец=2) равно.место(х=175,у=205) ясно = Кнопка (калькулятор, текст = 'Очистить', fg = 'черный', bg = '# 4287f5', команда=очистить, высота=2, ширина=11) #clear.grid(row=5, columns='1') ясно.место(х=260,у=55) Decimal= Button(calculator, text='.', fg='black', bg='#4287f5', команда = лямбда: нажмите ('.'), высота = 2, ширина = 10) #Decimal.grid(строка=6, столбец=0) Десятичное.место(x=5,y=205) защита open_calc(): расчет = Верхний уровень() приложение = Calc_app (расчет) если __name__ == "__main__": корень = Тк() приложение = Calc_app (корень) корень.mainloop() Приложение «Часы» работает нормально. Приложение калькулятора также работает нормально, когда я запускаю его отдельно, но когда я пытаюсь запустить его из основного файла, кнопки не работают.
Я подумал, что это какая-то проблема с импортом, но не увидел ничего, что соответствовало бы тому, что у меня было. Я выполнил тот же шаг, что и созданное мною приложение часов, которое, похоже, работает из панели запуска приложений, но с калькулятором это не сработало.
Я новичок в Tkinter и хочу сделать это для своего проекта в колледже. Я собирался сделать простую программу запуска приложений с калькулятором, часами и приложением для заметок из main.py. Я поискал в Интернете и нашел различные способы импорта других файлов Python. Для этого я использовал init.py.
init.py
из .clock_app импортируйте open_clock из .notes_app импортировать open_notes из .calc_app импортировать open_calc Это код моего основного файла (средства запуска приложений).
из tkinter import Tk,Button, PhotoImage импортировать приложения защита основной(): корень = Тк() #Иконки root_icon = PhotoImage(file="Assets/app_launcher_icon.png") #основные корневые свойства root.title("Средство запуска приложений") root.geometry("700x500") root.resizable(Ложь,Ложь) root.configure(bg="#49de71") root.iconphoto(False,root_icon) #Функции для каждого добавленного приложения #Иконки #Кнопки для открытия каждого приложения Calendar_button = Кнопка (корень, текст = «Часы», команда = Apps.open_lock) Calendar_button.place(x=239,y=5) Calendar_button.config(высота=20,ширина=30) калькулятор_кнопка = Кнопка (корень, текст = «Калькулятор», команда = Apps.open_calc) Calculator_button.config(высота=20,ширина=30) Calculator_button.place(x=472,y=5) корень.mainloop() если __name__ == "__main__": основной() А это код к калькулятору
из импорта tkinter * класс Calc_app: def __init__(я, корень): self.root = корень self.root.title("Калькулятор") корень.уничтожить() # Создаём виджеты для второго окна # отсюда глобальное выражение выражение="" #чтобы обновить выражение в текстовом поле защита нажмите (число): глобальное выражение выражение = выражение + строка (число) уравнение.set(выражение) защита равнопресс(): пытаться: глобальное выражение итог = str(оценка(выражение)) уравнение.set(всего) выражение="" кроме: уравнение.set(" ошибка ") выражение="" защита ясно(): глобальное выражение выражение = "" уравнение.set("") калькулятор=Тк() калькулятор.configure(background="#07398a") калькулятор.геометрия("350x300") калькулятор.resizable(Ложь,Ложь) уравнение = StringVar() выражение_поле = Entry(калькулятор,текстовая переменная=уравнение,ширина=30,шрифт=('Arial', 20)) выражение_field.place(x=0,y=0) button7 = Button(calculator, text='7', fg='black', bg='#4287f5', команда = лямбда: нажмите (7), высота = 2, ширина = 10) button7.place(x=5,y=55) button8 = Кнопка(калькулятор, text='8', fg='black', bg='#4287f5', команда = лямбда: нажмите (8), высота = 2, ширина = 10) button8.place(x=90,y=55) button9 = Button(calculator, text='9', fg='black', bg='#4287f5', команда = лямбда: нажмите (9), высота = 2, ширина = 10) button9.place(x=175,y=55) button4 = Button(calculator, text='4', fg='black', bg='#4287f5', команда = лямбда: нажмите (4), высота = 2, ширина = 10) button4.place(x=5,y=105) button5 = Button(calculator, text='5', fg='black', bg='#4287f5', команда = лямбда: нажмите (5), высота = 2, ширина = 10) button5.place(x=90,y=105) button6 = Button(calculator, text='6', fg='black', bg='#4287f5', команда = лямбда: нажмите (6), высота = 2, ширина = 10) button6.place(x=175,y=105) button1 = Button(calculator, text='1', fg='black', bg='#4287f5', команда = лямбда: нажмите (1), высота = 2, ширина = 10) button1.place(x=5,y=155) button2 = Button(calculator, text='2', fg='black', bg='#4287f5', команда = лямбда: нажмите (2), высота = 2, ширина = 10) button2.place(x=90,y=155) button3 = Button(calculator, text='3', fg='black', bg='#4287f5', команда = лямбда: нажмите (3), высота = 2, ширина = 10) button3.place(x=175,y=155) button0 = Button(calculator, text='0', fg='black', bg='#4287f5', команда = лямбда: нажмите (0), высота = 2, ширина = 10) button0.place(x=90,y=205) plus = Button(calculator, text=' + ', fg='black', bg='#4287f5', команда = лямбда: нажмите («+»), высота = 5, ширина = 11) плюс.место(х=260,у=160) минус = Кнопка(калькулятор, text=' - ', fg='black', bg='#4287f5', команда = лямбда: нажмите («-»), высота = 3, ширина = 11) минус.место(х=260,у=100) умножить = Кнопка(калькулятор, text=' * ', fg='black', bg='#4287f5', команда = лямбда: нажмите («*»), высота = 2, ширина = 22) умножить.место(х=5,у=255) разделить = Кнопка(калькулятор, text=' / ', fg='black', bg='#4287f5', команда = лямбда: нажмите («/»), высота = 2, ширина = 23) #divide.grid(строка=5, столбец=3) разделить.место(х=175,у=255) равно = Кнопка(калькулятор, text=' = ', fg='black', bg='#4287f5', команда = равное нажатие, высота = 2, ширина = 10) #equal.grid(строка=5, столбец=2) равно.место(х=175,у=205) ясно = Кнопка (калькулятор, текст = 'Очистить', fg = 'черный', bg = '# 4287f5', команда=очистить, высота=2, ширина=11) #clear.grid(row=5, columns='1') ясно.место(х=260,у=55) Decimal= Button(calculator, text='.', fg='black', bg='#4287f5', команда = лямбда: нажмите ('.'), высота = 2, ширина = 10) #Decimal.grid(строка=6, столбец=0) Десятичное.место(x=5,y=205) защита open_calc(): расчет = Верхний уровень() приложение = Calc_app (расчет) если __name__ == "__main__": корень = Тк() приложение = Calc_app (корень) корень.mainloop() Приложение «Часы» работает нормально. Приложение калькулятора также работает нормально, когда я запускаю его отдельно, но когда я пытаюсь запустить его из основного файла, кнопки не работают.
Я подумал, что это какая-то проблема с импортом, но не увидел ничего, что соответствовало бы тому, что у меня было. Я выполнил тот же шаг, что и созданное мною приложение часов, которое, похоже, работает из панели запуска приложений, но с калькулятором это не сработало.
Мобильная версия