ttk 笔记本标签在添加新标签时调整大小
ttk Notebook tabs resizing when adding a new tab
我正在使用 Tkinter 开发一个应用程序(这是第一次,所以请多多关照)。它将在顶部有 3 个不同的选项卡,每个选项卡包含多个小部件等,这些都使用网格放置。我面临的问题是当我尝试将小部件添加到第三个选项卡时。前 2 个我完全按照我想要的方式布置,但是当我开始添加到第三个选项卡时,所有内容似乎都调整了大小并且 'shrink' 缩小了。
在我下面添加的一小段代码中,当 运行 没有选项卡 3 时,框架正是我想要的大小,其中所有内容都适合选项卡 1 和 2。但是当我然后去并再次取消对选项卡 3 和 运行 的注释,您可以看到整个东西都缩小了,这使得前 2 个选项卡看起来很奇怪。
我尝试使用 grid_columnconfigure(0, weight=1) 向 f1、f2 和 f3 添加列权重,但它似乎没有帮助。我也试过将我的整个布局切换到内部框架和包装,但它似乎并没有很好地处理我想要的布局。
我确定这可能是菜鸟问题,但我正在用头撞墙。
谢谢!
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.ttk import Notebook
import datetime
# ~~~~~~~~~~~~~~~~~~ CREATE MAIN WINDOW AND WIDGET STYLES ~~~~~~~~~~~~~~~~~~~~
root = tk.Tk()
style = ttk.Style()
style.theme_use('clam')
root.title('Test')
root.geometry('1250x1000')
root.configure(background='yellow')
## Create a custom style for the tabs
# custom_style = ttk.Style()
# custom_style.configure('Custom.TNotebook.Tab', padding=[30,4])
tab = Notebook(root, style='Custom.TNotebook')
# ~~~~~~~~~~~~~~~~~~ CREATE & STYLE NOTEBOOK (TABS) ~~~~~~~~~~~~~~~~~~~~
## Create a frame (sub window) for each tab
f1 = tk.Frame(tab, width=700, height=700)
f2 = tk.Frame(tab, width=700, height=700)
f3 = tk.Frame(tab, width=700, height=700)
## Link the tabs to each frame
tab.add(f1, text='Tab 1')
tab.add(f2, text='Tab 2')
tab.add(f3, text='Tab 3')
## Place the Notebook (tabs) on the main window
tab.pack(fill='y')
# ~~~~~~~~~~~~~~~~~~ TAB 1 ~~~~~~~~~~~~~~~~~~~~
## Associate variables with each entry field and fill default with todays info
current_date = datetime.datetime.now()
date_var_one = tk.StringVar(value = current_date.strftime('%D'))
## Create Label and Entry Widgets
label_date = tk.ttk.Label(f1, text = 'Enter Date (MM/DD/YY): ', width = 18)
## Place Widgets on Frame (F1: Income Tab)
label_date.grid(row=0, column=0, sticky='w', pady=2)
# ~~~~~~~~~~~~~~~~~~ TAB 2 ~~~~~~~~~~~~~~~~~~~~
## Create Label and Entry Widgets
label_date_two = ttk.Label(f2,text = 'Enter Date (MM/DD/YY): ', width = 18)
## Place Widgets on Frame (F2: Expense Tab)
label_date_two.grid(row=0, column=0, sticky='w', pady=2)
# ~~~~~~~~~~~~~~~~~~ TAB 3 ~~~~~~~~~~~~~~~~~~~~
# ## Create Label and Entry widgets
# label_current = ttk.Label(f3, text = 'Enter current month (MM):',width= 18)
# ## Place Widgets on Frame (F3: Analysis Tab)
# label_current.grid(row=0, column=0)
# ~~~~~~~~~~~~~~~~~~ LOOP TO KEEP APP RUNNING ~~~~~~~~~~~~~~~~~~~~
root.mainloop()
问题不在于第三个选项卡,而是所有选项卡都分配了小部件并且重新计算了它们的高度。
尝试将尺寸直接分配给记事本:
tab = Notebook(root, style='Custom.TNotebook', width=700, height=700)
我正在使用 Tkinter 开发一个应用程序(这是第一次,所以请多多关照)。它将在顶部有 3 个不同的选项卡,每个选项卡包含多个小部件等,这些都使用网格放置。我面临的问题是当我尝试将小部件添加到第三个选项卡时。前 2 个我完全按照我想要的方式布置,但是当我开始添加到第三个选项卡时,所有内容似乎都调整了大小并且 'shrink' 缩小了。
在我下面添加的一小段代码中,当 运行 没有选项卡 3 时,框架正是我想要的大小,其中所有内容都适合选项卡 1 和 2。但是当我然后去并再次取消对选项卡 3 和 运行 的注释,您可以看到整个东西都缩小了,这使得前 2 个选项卡看起来很奇怪。
我尝试使用 grid_columnconfigure(0, weight=1) 向 f1、f2 和 f3 添加列权重,但它似乎没有帮助。我也试过将我的整个布局切换到内部框架和包装,但它似乎并没有很好地处理我想要的布局。
我确定这可能是菜鸟问题,但我正在用头撞墙。
谢谢!
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.ttk import Notebook
import datetime
# ~~~~~~~~~~~~~~~~~~ CREATE MAIN WINDOW AND WIDGET STYLES ~~~~~~~~~~~~~~~~~~~~
root = tk.Tk()
style = ttk.Style()
style.theme_use('clam')
root.title('Test')
root.geometry('1250x1000')
root.configure(background='yellow')
## Create a custom style for the tabs
# custom_style = ttk.Style()
# custom_style.configure('Custom.TNotebook.Tab', padding=[30,4])
tab = Notebook(root, style='Custom.TNotebook')
# ~~~~~~~~~~~~~~~~~~ CREATE & STYLE NOTEBOOK (TABS) ~~~~~~~~~~~~~~~~~~~~
## Create a frame (sub window) for each tab
f1 = tk.Frame(tab, width=700, height=700)
f2 = tk.Frame(tab, width=700, height=700)
f3 = tk.Frame(tab, width=700, height=700)
## Link the tabs to each frame
tab.add(f1, text='Tab 1')
tab.add(f2, text='Tab 2')
tab.add(f3, text='Tab 3')
## Place the Notebook (tabs) on the main window
tab.pack(fill='y')
# ~~~~~~~~~~~~~~~~~~ TAB 1 ~~~~~~~~~~~~~~~~~~~~
## Associate variables with each entry field and fill default with todays info
current_date = datetime.datetime.now()
date_var_one = tk.StringVar(value = current_date.strftime('%D'))
## Create Label and Entry Widgets
label_date = tk.ttk.Label(f1, text = 'Enter Date (MM/DD/YY): ', width = 18)
## Place Widgets on Frame (F1: Income Tab)
label_date.grid(row=0, column=0, sticky='w', pady=2)
# ~~~~~~~~~~~~~~~~~~ TAB 2 ~~~~~~~~~~~~~~~~~~~~
## Create Label and Entry Widgets
label_date_two = ttk.Label(f2,text = 'Enter Date (MM/DD/YY): ', width = 18)
## Place Widgets on Frame (F2: Expense Tab)
label_date_two.grid(row=0, column=0, sticky='w', pady=2)
# ~~~~~~~~~~~~~~~~~~ TAB 3 ~~~~~~~~~~~~~~~~~~~~
# ## Create Label and Entry widgets
# label_current = ttk.Label(f3, text = 'Enter current month (MM):',width= 18)
# ## Place Widgets on Frame (F3: Analysis Tab)
# label_current.grid(row=0, column=0)
# ~~~~~~~~~~~~~~~~~~ LOOP TO KEEP APP RUNNING ~~~~~~~~~~~~~~~~~~~~
root.mainloop()
问题不在于第三个选项卡,而是所有选项卡都分配了小部件并且重新计算了它们的高度。
尝试将尺寸直接分配给记事本:
tab = Notebook(root, style='Custom.TNotebook', width=700, height=700)