ボタンを押したときにメインページに戻ろうとしています。メインのフレームに切り替える方法
gui_main.py
:いくつかのフレーム
gui_scan.py
Done
ボタンを押したときに
gui_main.py
にあるメインメニューのフレームに戻る
私は2つのファイルを持っています。
問題:私は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のすべての名前を変更しています。 –