gpt4 book ai didi

python - Tkinter 自定义框架不工作

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:55 24 4
gpt4 key购买 nike

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

我想要的是一个框架,其下方有一条小分隔线,因此我正在创建一个“正常”框架,一个用作其下方分隔符的细框架,以及一个用于容纳它的大框架。

我在类中创建的所有内容都有效,除了框架本身。希望我的评论能解释什么是显示的,什么是不显示的。

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 的版本。

尝试以下操作(将 grid 重命名为 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 '....' 用于直观地表示层次结构):

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()

关于python - Tkinter 自定义框架不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19067935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com