首页 > 解决方案 > tkinter 窗口不显示

问题描述

我是 python 新手,正在尝试开发一个网络爬虫应用程序。目前,我没有收到任何错误消息,但是运行代码时不会显示 gui。任何帮助表示赞赏。

我已经在 stackoverflow 上搜索了类似的问题,但可以找到任何匹配的内容。

import tkinter as tk
from tkinter import ttk

LARGE_FONT=("Helvetica",12)

class MMA_fighters(tk.Tk):

    def __init__(self,*args,**kwargs):
        tk.Tk.__init__(self,*args,**kwargs)

        tk.Tk.wm_title(self,"Mixed Martial Arts Fighters")

        container =tk.Frame(self)
        container.pack(side="top",fill="both",expand="true")
        container.grid_rowconfigure(0,weight=1)
        container.grid_columnconfigure(0,weight=1)

        self.frames={ }

        for F in (StartPage,MainPage):

            frame=F(container,self)
            self.frames[F]=frame
            frame.grid(row=0,column=0)

        self.show_frame(StartPage)

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

class StartPage(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label=ttk.Label(self,text="Mixed Martial Arts Fighters", font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        label=ttk.Label(self,text="Select 'Continue' for more information on your favorite MMA fighter", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

        button1=ttk.Button(self,text="Continue",command=lambda :controller.show_frame(MainPage))
        button1.pack()
        button2=ttk.Button(self,text="Exit",command=quit())
        button2.pack()


class MainPage(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label=ttk.Label(self,text="Fighter",font=LARGE_FONT)
        label.pack(pady=10,padx=10)

app=MMA_fighters()
app.mainloop()

预期的结果是出现退出并继续项目进入第二页的窗口。实际结果是窗口没有出现。

标签: pythontkinter

解决方案


command=期望函数的名称没有()- 所谓的“回调” - 当您按下按钮时,mainloop将获得该名称并用于()运行它。

但是你有command=quit()所以它quit()在启动和退出程序时执行。

你需要

command=quit

您可以使用app.destroy而不是quit通知窗口您要结束程序,并且它应该在结束程序之前关闭窗口。


推荐阅读