Python 3.4 - (tk / ttk / tcl)LabelFrames Manager

时间:2015-09-04 03:08:16

标签: python user-interface tkinter

我正在使用Python的内置tkinter GUI构建器。

按下按钮时,我创建了一个更改labelframe的功能。有许多按钮,所有这些都打开了不同的labelframe。如果再次按下它们,它将重置为默认帧。 我不能发布完整的代码,因为它太长了,但这里有你应该需要的一切。

 button6 = ttk.Button(tab5, text="Button24",
                         command=lambda: controller.use_frame(Contents),
                         style="A.TButton")
    button6.grid(ipadx=btnipx, ipady=btnipy,
                 padx=btnpx, pady=btnpy,
                 row=8, column=3,
                 sticky="nsew")

    ###################################################
    # LABEL FRAMES
    #######################
    # DEFAULT FRAME
    group_default = ttk.LabelFrame(self, text="DEFAULT")
    label_default = ttk.Label(group_default, text="The selected program will execute here.\n\ntest", font=LARGE_FONT)
    label_default.grid(padx=30, pady=30, row=0, column=0, sticky="nsew")

    # LABEL FRAMES MANAGER
    group_s = None
    def lfm(group):
       if group != group:
           group_s = group.grid(row=0, column=1, sticky="nsew")
           return group_s
       else:
           group_s = group_default.grid(row=0, column=1, sticky="nsew")
           return group_s

    # THIS IS MY SAMPLE CALL TO AUTOMATICALLY SET IT TO DEFAULT
    lfm(group_default).grid(row=0, column=1, sticky="nsew")

我尝试从每个if / else块中取出'return'以及许多其他内容,但该函数不会返回labelframe,它会返回Nonetype。

这是错误:

  File "C:/Users/user/PycharmProjects/testGUI/gui1_0tst.py", line 1171, in __init__
    lfm(group_default).grid(row=0, column=1, sticky="nsew")
AttributeError: 'NoneType' object has no attribute 'grid'

2 个答案:

答案 0 :(得分:0)

grid(...)始终返回None。请考虑以下代码:

group_s = group.grid(row=0, column=1, sticky="nsew")

group_s始终为None,这可能不是您的意图。而不是return group_s您可能需要return groupreturn group_default

答案 1 :(得分:-1)

AHHHHHHHHHHHHHHH我不相信我没有看到这个!

我一直在这工作几个小时。这太简单了。

group_s = None
def lfm(group):
   if group != group:
       group_s = group.grid(row=0, column=1, sticky="nsew")
       return group_s
   else:
       group_s = group_default.grid(row=0, column=1, sticky="nsew")
       return group_s

# THIS IS MY SAMPLE CALL TO AUTOMATICALLY SET IT TO DEFAULT
lfm(group_default).grid(row=0, column=1, sticky="nsew")

lfm(group_default).grid(row = 0,column = 1,sticky =“nsew”

READS: group_default.grid(row = 0,column = 1,sticky =“nsew”)。grid(row = 0,column = 1,sticky =“nsew”

至少我的问题解决了:D

首次发布StackOverflow帖子

新问题:如果发生类似这样的事情,它是否会一直返回Nonetype?