Холст Tkinter не появляется - PullRequest
0 голосов
/ 11 мая 2018

Я совсем новичок в 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 голосов
/ 11 мая 2018

Вы создаете три подкадра своего родителя, сохраняя каждый из них как self.frame (так что все, кроме последнего, потеряны), и не размещаете ни одного из них нигде.

Итак, вы правильно разместили холст на одной из этих невидимых рамок, но это не приносит пользы.

Я не уверен, что вы пытаетесь сделать свсе эти отдельные фреймы.

  • Если вам действительно нужны три фрейма-брата, вы должны хранить их в отдельных переменных, или в списке, или в чем-то еще, и вам нужно разместить их.
  • Если вам нужен один родной кадр, просто создайте его один раз, а не три раза, и снова, вам нужно поместить его.
  • Если вам нужны три или один дочерний кадр вместо родственных кадров, создайте их с помощью self вместо self.master.
  • Если вам вообще не нужны родственные или дочерние рамки, не создавайте их, а просто поместите холст на self вместо self.frame.
0 голосов
/ 11 мая 2018

Вы импортируете Tkinter и Tkinter как tk, что приводит к путанице.

Application наследуется от Frame, поэтому вам не нужно создавать дополнительные кадры внутри.Конечно, не более одного имени self.frame.

Как насчет этого:

from Tkinter import *

class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.master = master
        self.pack()
        self.window()
        self.drawFigure()
        self.master.bind("<Escape>", self.end_fullscreen)

    def window(self):
        screen_width = self.winfo_screenwidth() / 2
        screen_height = self.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.C = Canvas(self, width=200, height=200, bg = 'red')
        self.C.pack()
        self.C.create_rectangle(50, 20, 150, 80, fill="#476042")

if __name__ == '__main__':
    root = Tk()
    w = Application(root)
    w.master.mainloop()
0 голосов
/ 11 мая 2018

Вы забыли позвонить 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...