У меня проблемы с графическим интерфейсом Tkinter.Мне нужно создать большое приложение.Мне нужно использовать классы для этого, чтобы управлять всеми модулями вместе.Для проверки модуля и получения справки здесь я попытался предоставить пример, близкий к точной проблеме (с небольшим примером) здесь:
Я создаю 1-е окно с кнопкой, помеченной как «Тест»,Что я хочу, так это то, что когда я нажимаю кнопку «Тест», появляется новое второе окно с текстом «Введите значение» и полем ввода, где я могу ввести значение.Я предоставил код ниже.Происходит то, что я могу получить новое окно, но текст «Введите значение» и поле ввода генерируется в первом окне вместо второго, а второе окно остается пустым.Я не понимаю, где я делаю неправильный логический вызов.Помощь будет очень ценится.
Я знаю, что нам не нужны классы для приложений с графическим интерфейсом, однако для управления моим большим приложением (не показано здесь) мне нужны классы, и я буду очень признателен, если какой-то Tkinter Guru может помочьменя с ошибкой в моем коде.
Просмотр файла GUI (gui_view.py)
import tkinter as tk
from tkinter import Tk
class MyMainGUI(tk.Frame):
def __init__(self, controller):
tk.Frame.__init__(self)
self.pack()
self.controller = controller
self.Button1=tk.Button(self)
self.Button1["text"]= "Test"
self.Button1["command"]=self.controller.buttonPressed1
self.Button1.grid(row=2,column=0,rowspan=2)
class MySecondGUI(tk.Frame):
def __init__(self, controller):
tk.Frame.__init__(self)
self.pack()
self.controller = controller
self.outputLabel2 = tk.Label(self)
self.outputLabel2["text"] = ("Enter Value")
self.outputLabel2.grid(row=1,rowspan=2)
#Entry Space
self.entrySpace2 = tk.Entry(self)
self.entrySpace2.grid(row=2,column=0,rowspan=2)
### gui Controller File (gui_controller.py)
import tkinter as tk
import gui_view # the VIEW file
class MainControl:
def __init__(self):
self.root = tk.Tk()
self.root.geometry('550x200')
self.view = gui_view.MyMainGUI(self)
self.view.mainloop()
def newWindow(self):
self.newWin = tk.Toplevel(self.root)
self.newWin.geometry('300x400')
self.newDisplay = tk.Label(self.newWin, text='Test Mode')
self.viewNew = gui_view.MySecondGUI(self.newWin)
self.viewNew.mainloop()
self.newDisplay.pack()
def buttonPressed1(self):
self.newWindow()
if __name__ == "__main__":
c = MainControl()
#
ДОБАВЛЕНИЕ ИЗМЕНЕННОГО КОДА С НОВОЙ ПРОБЛЕМОЙ.
Теперь я могу создать код, который открывает новое окно с записями, когда я нажимаю кнопку «Тест» в первом окне.Однако у меня возникают проблемы при создании кнопок в окне Scond. То, как у меня сейчас получается, выдает ошибку, говоря: «Объект MySecondGUI не имеет атрибута« buttonPressed2 »
Помощь будет очень полезна.
Я вставил обновленный код ниже:
ФАЙЛ GUI_VIEW (gui_view.py)
import tkinter as tk
изtkinter import Tk
класс MyMainGUI (tk.Frame):
def __init__(self, controller):
tk.Frame.__init__(self)
self.pack()
self.controller = controller
self.Button1=tk.Button(self)
self.Button1["text"]= "Test"
self.Button1["command"]=self.controller.buttonPressed1
self.Button1.grid(row=2,column=0,rowspan=2)
класс MySecondGUI (tk.Toplevel):
def __init__(self):
tk.Toplevel.__init__(self)
self.outputLabel2 = tk.Label(self)
self.outputLabel2["text"] = ("Enter Value")
self.outputLabel2.grid(row=5,rowspan=2)
self.entrySpace2 = tk.Entry(self)
self.entrySpace2.grid(row=8,column=0,rowspan=2)
self.Button2=tk.Button(self)
self.Button2["text"]= "Try Me"
self.Button2["command"] = self.buttonPressed2
self.Button2.grid(row=14,column=0,rowspan=2)enter code here
ФАЙЛ ГЛАВНОГО КОНТРОЛЛЕРА GUI
импорт tkinter as tk
импорт gui_view # файл VIEW
класс MainControl:
def __init__(self):
self.root = tk.Tk()
self.root.geometry('550x200')
self.view = gui_view_temp.MyMainGUI(self)
self.view.mainloop()
def newWindow(self):
self.viewNew = gui_view.MySecondGUI()
self.viewNew.geometry('300x400')
self.newDisplay = tk.Label(self.newWin, text='Test Mode')
self.viewNew.mainloop()
self.newDisplay.pack()
def buttonPressed1(self):
self.newWindow()
def buttonPressed2(self):
pass
если имя == " main ":
c = MainControl()