python 2.7.13 使用小部件填充选项卡(来自笔记本)

python 2.7.13 fill tabs (from Notebook) with widgets

我在用其他小部件填充这些选项卡时遇到问题,这是当前状态的图像:

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) 与笔记本的对象 n 一起使用来制作选项卡正确定位,但小部件会随着 .place(x=any value, y=any value).grid_location(x=any value, y = any value).

的任何使用而消失

然后我只用 .pack() 更改了小部件的 .place() ,并且 .pack() 将小部件放在彼此之上,想象一下当组合框采用相同的按钮时,按钮是多么无用放置并隐藏它!,所以我返回到所有小部件的 .grid(row = any value, column = any value) 和主要的 window 的 .grid(),但是,我得到了奇怪的结果,即选项卡无法识别小部件是除了 1 个按钮外属于它们,其他小部件都放在选项卡之外。

考虑到我对 Tkinter 还很陌生,我错过了什么?!

创建从 Frame 继承的 class 的全部意义在于 class 中的所有内容都在该框架内。你没有那样做。

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

n=Notebook(self)

类似地,当你想在选项卡中放置windows时,它们的主人需要是框架,而不是调用[的结果=12=]。原因是 n.add(...) returns None。当您将其用作 ComboboxButton 的主节点时,它们将成为根 window.

的子节点