Я кодировал GUI с помощью TKinter. Приложение состоит из множества страниц. Эти страницы загружаются при нажатии соответствующих кнопок. Единственная страница, которая должна загружаться в начале, - это стартовая страница. Однако SearchAndModifySubsPage, EmployeeManagementPage, SearchAndModifyEmpPage кратковременно мигает перед загрузкой начальной страницы. Но эти страницы (SearchAndModifySubsPage, EmployeeManagementPage, SearchAndModifyEmpPage) должны загружаться только при нажатии кнопки.
Обратите внимание, что каждая из этих страниц - это отдельные классы со своими собственными функциями и они имеют более 1000 строк кода.
Ниже приведен код класса, который организует другие страницы и загружает стартовую страницу.
class KFMS(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
Tk.wm_title(self, 'KGMS')
Tk.iconbitmap(self, default=Parameters.Path.EICO)
self.container = Frame(self)
self.container.pack(side="top", fill="both", expand=True)
self.container.grid_rowconfigure(0, weight=1)
self.container.grid_columnconfigure(0, weight=1)
self.container.configure(background=Parameters.Constants.BACKGROUND)
self.frames = {}
# Menubar
menubar = Menu(self.container)
self.config(menu=menubar)
# submenu
submenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='File', menu=submenu)
submenu.add_command(label='Home', command=lambda: self.show_frame(StartPage))
submenu.add_command(label='KK', command=lambda: self.show_frame(KKPage))
submenu.add_separator()
submenu.add_command(label='Exit', command=self.destroy)
submenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='Help', menu=submenu)
submenu.add_command(label='User guide')
submenu.add_command(label='Support')
# Tag
tagFrame = Frame(self)
tagFrame.pack(side=BOTTOM, fill=X)
tagFrame.config(bg="blue")
# tagFrame.configure(background=Parameters.Constants.BACKGROUND)
ds = PhotoImage(file=Parameters.Path.DSG)
dsl = Label(image=ds)
dsl.image = ds
dsLabel = Label(tagFrame, text='dear Sky', image=ds, compound="right", font=("Purisa", 20, "italic"),
background=Parameters.Constants.BACKGROUND, fg="#888B89") # A5A9A7
dsLabel.pack(side="right", fill=X)
def framePages(self):
for F in (StartPage, AdminPage, KFPage, KKPage,
SubsPage, AddSubsPage, SearchAndModifySubsPage, SubscriberInformationPage, SubscriberHistoryPage,
EmployeeManagementPage, AddNewEmpPage, SearchAndModifyEmpPage, EmployeeInformationPage,
EmployeeLogPage):
frame = F(self.container, self)
frame.configure(background=Parameters.Constants.BACKGROUND)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, controller):
try:
frame = self.frames[controller]
frame.tkraise()
except Exception as e:
print(e)
if __name__ == "__main__":
kfms = KFMS()
kfms.geometry("1280x720")
kfms.wm_state('zoomed')
# kfms.resizable(0, 0)
kfms.framePages()
# t = Thread()
# t.daemon = True
# t.start()
kfms.mainloop()
При нажатии кнопки я использую следующую команду для перенаправления на нужные страницы.
searchModifyButton = Button(gridFrame, text="Search & Modify Employee", image=photo, compound=TOP,
font=(Parameters.Constants.FONT, Parameters.Constants.FONT_SIZE),
fg=Parameters.Constants.FG, cursor="hand2",
background=Parameters.Constants.BACKGROUND,
borderwidth=0, command=lambda :self.controller.show_frame(SearchAndModifyEmpPage))
# self.after_idle(self.searchRedirect) this doesn't help resolve the issue
searchModifyButton.grid(row=1, column=1, padx=30, pady=PADY)
Я попытался создать поток GUI и использовал метод after_idle. Но ничего не получалось. Я извиняюсь, поскольку не смогу предоставить больше кода, чем это, чтобы воспроизвести проблему. Пожалуйста, помогите мне решить эту проблему. Любая помощь приветствуется.
Спасибо.