分段错误:11 - tkinter python

Segmentation fault: 11 - tkinter python

分段错误:11 - 不确定这意味着什么,为什么会发生。我认为这是我机器上 Python 的一个问题,所有其他文件 运行 没问题。当然,我已经尝试重新启动并重新安装 Python 但没有帮助。

我只是想通过 tkinter 的菜单栏实现框架切换。

非常感谢任何帮助。

# import tkinter modules
from tkinter import *
from tkinter import ttk
import tkinter.font as tkFont
from PIL import ImageTk, Image
from tkcalendar import *

# import modules for restart functionality
import os
import sys
import time


# define self
class tkinterApp(Tk):

    def __init__(self,*args, **kwargs):

        Tk.__init__(self, *args, **kwargs)

        # creating a container
        container = Frame(self)
        container.pack(side = "top", fill = "both", expand = True)

        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)

        # initialising frames to an empty array
        self.frames = {}

        menu_bar = Menu(container)

        menu_bar.add_cascade(label="Main Menu", menu=menu_bar)
        menu_bar.add_command(label="Welcome page", command=lambda: self.show_frame(welcome_frame))
        menu_bar.add_command(label="Book a vehicle", command=lambda: self.show_frame(booking_frame))
        menu_bar.add_command(label="Register as new user", command=lambda: self.show_frame(register_frame))

        Tk.config(self, menu=menu_bar)

        for F in (welcome_frame, register_frame, booking_frame):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")

        self.show_frame(welcome_frame)

        def show_frame(self, cont):
            frame = self.frames[cont]
            frame.tkraise()





class welcome_frame(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)

        # welcome_frame = Frame(self, width=1000, height=800)
        # welcome_frame.grid()

        welcome = Label(welcome_frame, text="Hello, please use the menu above to navigate the interface")
        welcome.grid(row=0, column=4, padx=10, pady=10)

class register_frame(Frame):

    def __init__(self, parent, controller):

        Frame.__init__(self, parent)

        welcome = Label(self, text="New user - enter your details below to use the Collyer's car park.")
        welcome.grid(row=0, column=4, padx=10, pady=10)






class booking_frame(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)


app = tkinterApp()
app.geometry("1000x800")
app.mainloop()

您正在尝试制作级联菜单,其中级联菜单是同一菜单:

menu_bar.add_cascade(label="Main Menu", menu=menu_bar)

menu 选项需要指向一个新的菜单菜单。

main_menu = Menu(menu_bar)
menu_bar.add_cascade(label="Main Menu", menu=main_menu)

我猜你也想把菜单命令放在那个菜单上

main_menu.add_command(label="Book a vehicle", command=lambda: self.show_frame(booking_frame))
main_menu.add_command(label="Register as new user", command=lambda: self.show_frame(register_frame))

与问题无关,这段代码也是错误的:

welcome = Label(welcome_frame, text="Hello, please use the menu above to navigate the interface")

您正在尝试使用 class 作为 Label 小部件的 parent/master。你不能那样做。第一个参数需要是一个小部件。在这种情况下,它应该是 self.

您还需要确保 show_frame 的缩进与 tkinterApp class 的 __init__ 方法相同