【问题标题】:tkinter window empty , not displaying texttkinter 窗口为空,不显示文本
【发布时间】:2017-07-11 06:32:28
【问题描述】:

我正在 tkinter 上运行一个简单的教程,但由于某种奇怪的原因,我的窗口出现了空,并且没有显示任何“文本 =”。我浏览了所有相关的问题(这里有一些),但没有一个给出解决方案。

脚本在没有错误消息的情况下执行,但窗口并不意味着是空的。任何建议都将不胜感激,因为我觉得我探索了所有死胡同..

代码如下:

import tkinter as tk
LARGE_FONT=("Verdana", 12)
class SeaofBTCapp (tk.Tk):
    def _init_(self,*args,**kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        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 = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column = 0, sticky="nsew")
        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 = tk.Label(self, text="Start Page", font=LARGE_FONT)
        label.pack(pady=10, padx=10)



app= SeaofBTCapp()
app.mainloop()

Python 版本:3.5.2 |Anaconda 4.1.1(64 位)

关于不同时使用 .frame 和 .pack 的主题的其他一些问题,我尝试删除 .frame 行或 .pack 行,但结果相同。脚本运行无错误,但窗口为空。

谢谢!

【问题讨论】:

  • __init__需要两个下划线
  • 啊,谢谢!我瞎了!我看到了另一个答案的回复,然后回去检查我的,但一定是盲目的,因为我走开了,以为是的,我得到了双下划线!真的很赞!现在可以使用了!

标签: python tkinter


【解决方案1】:

此代码不起作用的原因是您没有正确显示init。您使用了_init_,每个应该有 2 个下划线,例如__init__。这是你应该做的:

import tkinter as tk
LARGE_FONT=("Verdana", 12)
class SeaofBTCapp (tk.Tk):
    def _init_(self,*args,**kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        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 = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column = 0, sticky="nsew")
        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 = tk.Label(self, text="Start Page", font=LARGE_FONT)
        label.pack(pady=10, padx=10)



app = SeaofBTCapp()
app.mainloop()

另外,您使用的是 python 3.5,此代码在 python 2 中运行得更好。

希望我能帮上忙:)

【讨论】:

  • 非常感谢!整天卡在上面。真的很欣赏这些快速的答案。
  • 只想说你的评论 this code works better in python 2 是错误的,tkinter 是 python 3 包,在 python 2 中它被命名为 Tkinter 编写的脚本将无法在 python 2 上运行改变了。
【解决方案2】:

根据史蒂文的回答:

__init__ 需要两个下划线 – Steven Summers

我只是因为盯着那些寻找问题所在的线条而失明。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2018-01-08
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多