2015-09-04 34 views
0

我正在使用Python内置的tkinter GUI生成器。Python 3.4 - (tk/ttk/tcl)LabelFrames Manager

我做了一个功能,当一个按钮被按下时改变一个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块,和许多其他的事情了“回归”,但功能不会返回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' 
+0

我们不需要“完整的代码”,我们需要最少量的实际运行的代码,这会复制问题。编写一个只有足够代码来解决问题的新程序。通常,您试图编写该程序的行为将使您能够自己发现错误。请参阅http://stackoverflow.com/help/mcve –

回答

-1

AHHHHHHHHHHHHHH我不能相信我没有看到这!

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

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(行= 0,列= 1,粘= “NSEW”

READS: group_default.grid(行= 0,列= 1,粘=“NSEW “).grid(行= 0,列= 1,粘=” NSEW”

至少我的问题就解决了:d

首先StackOverflow上有史以来后

新的问题:如果这样的事情发生,会的它总是返回Nonetype?

+0

如何编辑我的If语句,以便如果我单击按钮两次,它将重置为默认值?它不工作,但其他一切都是 – Mothern

0

grid(...)总是返回None。请看下面的代码:

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

group_s永远是None,这可能不是你打算什么。而不是return group_s您可能需要return groupreturn group_default

+0

谢谢,但问题在我早些时候的答案中解决了。当我调用lfm(group_default).grid(row = 0,column = 1,sticky =“nsew)时,函数返回了group.grid(row = 0,column = 1,sticky =”nsew“),所以我的代码真的输出:group.grid(row = 0,column = 1,sticky =“nsew”)。grid(row = 0,column = 1,sticky =“nsew),这在任何方面都是无效的。为了解决这个问题,我只调用了lfm(group_default)而没有网格。代码现在完美工作:) – Mothern