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
。当您将其用作 Combobox
和 Button
的主节点时,它们将成为根 window.
的子节点
我在用其他小部件填充这些选项卡时遇到问题,这是当前状态的图像:
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
。当您将其用作 Combobox
和 Button
的主节点时,它们将成为根 window.