Tkinter 自定义框架不起作用

编程入门 行业动态 更新时间:2024-10-10 13:18:13
本文介绍了Tkinter 自定义框架不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试在 Python v2.7 的 tkinter 中创建自定义框架.我已经完成了一次(带有滚动条的框架),但是我的第二次尝试不起作用.我将它与确实有效的 Frame 进行了比较,我无法理解我做了什么不同的事情.

I'm trying to create a custom frame in tkinter, Python v2.7. I have done this just fine once (a frame with a scrollbar), but my second attempt isn't working. I compare it to the Frame that does work, and I can't understand what I have done differently.

我想要的是一个在其下方有一条小分隔线的框架,因此我正在创建一个普通"框架,一个用作其下方分隔符的细框架,以及一个用来固定它的 bigFrame.

What I want is a frame that has a little separator line underneath it, so I'm creating a "normal" frame, a thin frame to use as a separator under it, and a bigFrame to hold it.

我在课堂上创建的一切都有效,除了框架本身.希望我的评论能解释显示和未显示的内容.

Everything I create in the class works, except the frame itself. Hopefully my comments explain what is and isn't showing.

from Tkinter import * class FunFrame(Frame): def __init__(self, master, lbl, **kwargs): self.bigFrame = Frame(master) Frame.__init__(self, self.bigFrame, width=280, height=200, bg="red", **kwargs) self.grid(row=0, column=0, pady=3) #this is in bigFrame, and doesn't display #however the padding is still respected self.separator = Frame(self.bigFrame, height=2, bd=1, width=280, relief = SUNKEN) self.separator.grid(row=1, column=0) #this is in bigFrame, and displays self.l = Label(self, text=lbl) #this is in self and doesn't display self.l.grid(row=0, column=0) def grid(self, **kwargs): self.bigFrame.grid(**kwargs) if __name__ == "__main__": root=Tk() Frame1=FunFrame(root, "hello") Frame2=FunFrame(root, "world") Frame1.grid(row=0, column=0) Frame2.grid(row=1, column=0) root.mainloop()

推荐答案

如果你在 __init__ 中调用 self.grid,它会调用你自己的 grid代码>,不是 Tkinter 的版本.

If you call self.grid in __init__, it calls your own grid, not Tkinter's version.

尝试以下操作(将 grid 重命名为 grid_):

Try following (renamed grid to grid_):

from Tkinter import * class FunFrame(Frame): def __init__(self, master, lbl, **kwargs): self.bigFrame = Frame(master) Frame.__init__(self, self.bigFrame, width=280, height=200, bg="red", **kwargs) self.grid(row=0, column=0, pady=3) self.separator = Frame(self.bigFrame, height=2, bd=1, width=280, relief=SUNKEN) self.separator.grid(row=1, column=0) self.l = Label(self, text=lbl) self.l.grid(row=0, column=0) def grid_(self, **kwargs): ######## grid -> grid_ self.bigFrame.grid(**kwargs) if __name__ == "__main__": root=Tk() Frame1 = FunFrame(root, "hello") Frame2 = FunFrame(root, "world") Frame1.grid_(row=0, column=0) ######## grid -> grid_ Frame2.grid_(row=1, column=0) ######## grid -> grid_ root.mainloop()

我宁愿代码如下(if '....' 用于直观地表示层次结构):

I'd rather code as follow (if '....' was used to represent hierarchy visually):

from Tkinter import * class FunFrame(Frame): def __init__(self, master, lbl, **kwargs): Frame.__init__(self, master) if 'inside outer frame (self)': innerFrame = Frame(self, width=280, height=200, bg="red", **kwargs) innerFrame.grid(row=0, column=0, pady=3) if 'inside inner frame': self.l = Label(innerFrame, text=lbl) self.l.grid(row=0, column=0) separator = Frame(self, height=2, bd=1, width=280, relief=SUNKEN) separator.grid(row=1, column=0) if __name__ == "__main__": root = Tk() Frame1 = FunFrame(root, "hello") Frame2 = FunFrame(root, "world") Frame1.grid(row=0, column=0) Frame2.grid(row=1, column=0) root.mainloop()

更多推荐

Tkinter 自定义框架不起作用

本文发布于:2023-11-02 06:03:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1551568.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   框架   不起作用   Tkinter

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!