python 2.7.13用小部件填充标签(来自Notebook)

时间:2017-08-14 17:18:59

标签: python python-2.7 tkinter ttk

我在使用其他小部件填充这些标签时遇到问题,以下是当前状态的图像:

SAP2000 tab/the 1st one

ETABS tab/the 2nd one

#imports
import Tkinter as tk #to be able to use its "Button" as tk.Button
import ttk
from Tkinter import * 
from ttk import *
#The GUI
class MYWINDOW(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master) #run the Parent's initiation

        self.InitUI() #construct the UI

    def InitUI(self):

        #make rows and columns visible with "minsize"
        for row in range(5):
            self.grid_rowconfigure(row,minsize=25)
        for col in range(5):
            self.grid_columnconfigure(col,minsize=10)
        #make the parent window appears
        self.grid()

        #make 2 tabs: SAP2000, ETABS
        n=Notebook(self.master)
        n.grid(row=0,column=1)

        #Construct tab ETABS
        fetabs = Frame(n)
        tetabs= n.add(fetabs,text='ETABS')

        impetabs=tk.Button(tetabs,text="Import ETABS Model",width=20,relief=tk.RAISED)
        impetabs.grid(row=0,column=1)


        #Construct tab SAP2000
        fsap = Frame(n)
        tsap = n.add(fsap,text='SAP2000')

        impsap=tk.Button(fsap,text="Import SAP2000 Model",width=20,relief=tk.RAISED)
        impsap.grid(row=1,column=1)

        seltwtmdfcmbox=ttk.Combobox(tsap,justify=tk.CENTER,state='readonly')
        seltwtmdfcmbox.grid(row=1,column=3)

如果有任何使用.pack().place()的建议,这就是我选择.grid()的原因: -

此外,我之前尝试过.pack()管理员,但是使用它会将标签本身分配到错误的位置,然后我使用.place(x=0,y=0,relheight=1,relweight=1)与Notebook的对象n正确制作标签定位,但小部件会随着.place(x=any value, y=any value).grid_location(x=any value, y = any value)的使用而消失。

然后我只用.place()更改了.pack()个小部件,并且.pack()将小部件放在彼此的顶部,想象一下当Combobox占据同一个位置时按钮是多么无用隐藏它!所以我回到.grid(row = any value, column = any value)所有小部件和.grid()主窗口,然而,我得到了奇怪的结果,即标签无法识别小部件属于他们与异常1个按钮,其他小部件放在标签之外。

考虑到我对Tkinter很新,我错过了什么?!

1 个答案:

答案 0 :(得分:0)

创建一个继承自Frame的类的重点是该类中的所有内容都在该框架内。你不是那样做的。

您正在将笔记本的主设备设置为与主设备的主设备相同。相反,它需要是框架:

n=Notebook(self)

类似地,当您想要在选项卡中放置窗口时,他们的主人需要是框架,而不是调用n.add的结果。原因是,n.add(...)返回None。当您将其用作ComboboxButton的母版时,它们将成为根窗口的子项。