1
我想回去的主網頁時在Done
按鈕用戶按下。如何切換到一個框架中主要
我有兩個文件:
gui_main.py
:有幾幀
gui_scan.py
主界面:執行掃描,當用戶按下按鈕Done
返回到位於gui_main.py
主菜單框架。
問題:每當我稱爲幀從gui_main.py
,我得到一個KeyError
因爲框架不位於主框架列表。 經過很多調試,我發現我錯誤地引用了gui_main.py
中的幀。這是怎麼了引用它:
這裏是一個MVCE等效代碼:
#gui_main.py
import tkinter as tk
from tkinter import ttk
# External file imports
import gui_scan as scan
from gui_frame import PageFrame
class MainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
print("Loading")
print ("Constructing Frames")
self.frames = {}
for F in (PageOne,Menu, Settings, scan.PerformScan):
frame = F(container, self)
self.frames[F] = frame
def show_frame(self, frame_name):
""" Show @frame_name frame """
self.active_frame = self.frames[frame_name] # <-- this causes the error
self.active_frame.tkraise()
# PageOne Frame Class
class PageOne(PageFrame):
def __init__(self, parent, controller):
""" ...."""
# Implementation of this is iirelavant to question
# Menu Frame Class
class Menu(PageFrame):
def __init__(self, parent, controller):
""" ...."""
# Implementation of this is iirelavant to question
# Settings Frame Class
class Settings(PageFrame):
def __init__(self, parent, controller):
""" ...."""
# Implementation of this is iirelavant to question
if __name__ =="__main__":
try:
app = MainWindow()
except Exception:
# Problems
print ("Problems running GUI")
其他文件:
#gui_scan.py
import tkinter as tk
from gui_frame import PageFrame
import gui_main as main
class PerformScan(PageFrame):
def __init__(self, parent, controller):
PageFrame.__init__(self, parent, controller)
label = tk.Label(self, padx=0, text="When you are ready press \"Start\" \n", justify=tk.CENTER)
label.pack()
button = tk.Button(self, text='Start', command=lambda: self.run_scan())
button.pack()
def run_scan(self):
""" Run a scan"""
# The scan runs here
# at the end, have the user press `Done` and go back to Menu from `gui_main.py`
self.button_frame = tk.Frame(self.final_frame, bg="red")
self.button = tk.Button(self.button_frame, text = "Done",
command = lambda:self.controller.show_frame(main.Menu)) # <-- this is wrong,(I think)
self.button.grid(row = 0, column=3, padx = 5)
self.button_frame.pack()
調試: 打印出self.frames幀from main_gui:
Frame: <class '__main__.PageOne'>
Frame: <class '__main__.Menu'>
Frame: <class '__main__.Settings'>
Frame: <class 'gui_scan.PerformScan'>
按下run_scan(self)
通行證的Done
按鈕在此:
<class 'gui_main.Menu'>
這產生一個錯誤,而我停留在我在,而不是切換回Menu
幀幀一切。
您是否嘗試過運行您的mcve?它沒有。只有太多的按鈕才能按下(GUI不會啓動)。 –
模塊缺少gui_frame.py來幫助你,然後檢查每個文件裏面的導入 – PRMoureu
@RonNorris我爲新手MCVE道歉。我不能包含所有內容,因爲我沒有編寫代碼,而只是繼續開發。我沒有代碼的版權,並且我正在重命名我提供的MCVE中的所有內容。 –