在python3 tkinter中,wigdet框架不会在界面中显示

时间:2017-07-20 09:43:54

标签: python-3.x tkinter frame

我使用相同格式的框架,但它没有在界面中显示,希望有人能告诉我解决方案,谢谢。

class Interface(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.master.title("measurement")
        self.grid()
        # fix the size and parameters of widget
        self.master.geometry("700x400+100+50")
        self.master.Frame1 = Frame(self,relief=GROOVE,bg='white')
        self.master.Frame1.grid(column=1,row=9)
        self.can =Canvas(self, bg="ivory", width =200, height =150)
        self.master.canvas = Canvas(self.master, width=150, height=120, background='snow')
        ligne1=self.master.canvas.create_line(75, 0, 75, 120)

if __name__ == "__main__":
    window = Tk()
    window.resizable(False, False)

    Interface(window).mainloop()

3 个答案:

答案 0 :(得分:1)

我无法弄清楚为什么你有2 Canvas,但问题是你没有把它们放在他们各自的父母身上。我删除了许多看似不必要的代码,并重新构建了代码以使其更符合逻辑:

class Interface(Frame):
    def __init__(self, parent):
        self.parent = parent
        super().__init__(self.parent)
        self.Frame1 = Frame(self, relief=GROOVE)
        self.Frame1.grid()

        self.canvas = Canvas(self.Frame1, bg="ivory", width=200, height=150)
        self.canvas.grid()

        self.canvas.create_line(75, 0, 75, 120)

if __name__ == "__main__":
    root = Tk()

    # Tk configurations are not relevant to
    # the Interface and should be done out here
    root.title('Measurement')
    root.geometry('700x400+100+50')
    root.resizable(False, False)

    Interface(root).pack()

    root.mainloop()

答案 1 :(得分:0)

我想我并不是真的了解你的问题,你没有看到你的画面因为你没有任何小部件,所有

org.glassfish.jersey.jackson.JacksonFeature.class

PS:使用import tkinter as tk class Interface(tk.Frame): def __init__(self,parent=None): tk.Frame.__init__(self,parent) self.master.title("measurement") self.grid(row=0, column=0) # fix the size and parameters of widget self.master.geometry("700x400+100+50") self.master.Frame1 = tk.Frame(self,relief='groove',bg='white') self.master.Frame1.grid(column=1,row=9) labelExemple =tk.Label(self.master.Frame1, text="Exemple") labelExemple.grid(row=0,column=0) self.can = tk.Canvas(self, bg="ivory", width =200, height =150) self.master.canvas = tk.Canvas(self.master, width=150, height=120, background='snow') self.ligne1=self.master.canvas.create_line(75, 0, 75, 120) if __name__ == "__main__": window = tk.Tk() window.resizable(False, False) Interface(window).mainloop() 代替import tkinter as tk

答案 2 :(得分:0)

这几行代码有几个问题,几乎都与你使用网格的方式有关:

  1. 您没有使用sticky选项,因此小部件不会扩展以填充它们所占用的空间
  2. 您没有为任何行或列设置weight,因此tkinter不知道如何分配未使用的空间
  3. 您没有使用gridpack将画布放在框架内,因此框架的默认尺寸为1x1
  4. 最大的问题是你试图立刻解决所有这些问题。只要您一次只尝试解决一个问题,布局问题通常很容易解决。

    首先从Interface中删除所有小部件。然后,给那个框架一个独特的背景颜色,然后尝试让它填充窗口(假设这最终是你想要它做的)。另外,删除root.resizable(False, False)。它很少是用户想要的东西(他们喜欢能够控制他们的窗口),而且它使调试布局问题的工作更加困难。

    在您显示Interface的实例后,添加一个小部件并确保它也显示出来。然后添加下一个,下一个,一次添加一个小部件并观察它的行为方式。