Tkinter画布没有出现

时间:2018-05-11 17:02:27

标签: python canvas tkinter

我对Tkinter很新,这是我的第一个程序,谁能告诉我为什么画布没有出现?我没有收到任何错误,所以我认为它有效但只是不可见?我尝试将它向上移动一层,但它仍然是看不见的。这是我的代码:

from Tkinter import *
import Tkinter as tk

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.frame = Frame(self.master)
        self.master = master
        self.window()
        self.drawFigure()
        # self.master.attributes('-fullscreen', True)
        self.master.bind("<Escape>", self.end_fullscreen)

    def window(self):
        self.frame = Frame(self.master)
        screen_width = self.frame.winfo_screenwidth() / 2
        screen_height = self.frame.winfo_screenheight() / 2
        self.master.geometry('%dx%d' % (screen_width, screen_height))

    def end_fullscreen(self, event=None):
        self.master.attributes("-fullscreen", False)

    def drawFigure(self):
        self.frame = Frame(self.master)
        self.C = Canvas(self.frame, width=200, height=200, bg = 'red')
        self.C.pack()
        self.C.create_rectangle(50, 20, 150, 80, fill="#476042")

if __name__ == '__main__':
    root = tk.Tk()
    w = Application(root)
    w.master.mainloop()

感谢所有输入。

3 个答案:

答案 0 :(得分:1)

您忘记在pack()上创建的框架上致电drawFigure()

def drawFigure(self):
    self.frame = Frame(self.master)
    self.frame.pack()                      # <--- There
    self.C = Canvas(self.frame, width=200, height=200, bg = 'red')
    self.C.pack()
    self.C.create_rectangle(50, 20, 150, 80, fill="#476042")

答案 1 :(得分:1)

您正在创建父级的三个子框架,将每个子框架存储为self.frame(因此除最后一个之外的所有框架都丢失了),并且不将它们中的任何一个放置在任何位置。

所以,你已经正确地将画布放在其中一个不可见的框架上,但这没有任何好处。

我不确定你要对所有这些单独的帧做什么。

  • 如果你真的需要三个兄弟框架,你必须将它们存储在单独的变量中,或者存储在列表中,或者你需要放置它们。你需要放置它们。
  • 如果你需要一个兄弟框架,只需创建一次而不是三次,再次,你需要放置它。
  • 如果您需要三个或一个子框架而不是兄弟框架,请使用self而不是self.master创建它们。
  • 如果您根本不需要任何兄弟或子框架,请不要创建它们,只需将画布放在self而不是self.frame上。

答案 2 :(得分:1)

您将Tkinter Tkinter导入为tk,这会让您感到困惑。

npm install react-transform-hmr 继承自Frame,因此您无需在其中创建其他框架。当然不超过一个名为Application

这个怎么样:

self.frame