Изменение размера вкладок ttk при добавлении новой вкладки - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над приложением, использующим Tkinter (впервые, пожалуйста, будьте добры). Вверху будет 3 разных вкладки, каждая из которых содержит несколько виджетов и т. Д. c, которые размещаются с использованием сетки. Проблема, с которой я сталкиваюсь, это когда я пытаюсь добавить виджеты на третью вкладку. Первые 2 я выложил именно так, как я хочу, но когда я начинаю добавлять на третью вкладку, кажется, что все изменится и уменьшится.

В небольшом фрагменте кода, который я добавил ниже, при запуске без вкладки 3 фрейм соответствует точному размеру, который мне нужен, где все хорошо подходит для вкладок 1 и 2. Однако когда я тогда go и Раскомментируйте вкладку 3 и запустите ее снова, и вы увидите, что все это сокращается, и это делает первые 2 вкладки совершенно неопрятными.

Я попытался добавить веса столбцов к f1, f2 и f3, используя grid_columnconfigure (0 , вес = 1) однако это, похоже, не помогло. Я также попытался переключить всю мою компоновку на внутренние рамки и упаковку, но она, кажется, не очень хорошо справилась с макетом, который мне нужен.

Я уверен, что это, скорее всего, проблема с нубами, но я бьюсь головой к стене.

Спасибо!

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()

1 Ответ

0 голосов
/ 11 апреля 2020

Проблема не в третьей вкладке, а в том, что для всех вкладок назначены виджеты, а их высота пересчитана.

Попробуйте назначить размеры непосредственно Блокноте:

tab = Notebook(root, style='Custom.TNotebook', width=700, height=700)
...