首页 > 解决方案 > Tkinter 初学者问题 - 如何匹配不同小部件之间的大小?

问题描述

问题作为标题。我发现很难理解为什么这两个小部件的大小不同,即使我指定了相同的参数。我显然做错了什么——或者我忘记了什么。任何帮助,将不胜感激!

from tkinter import ttk
import tkinter as tk
from tkinter import *


root = tk.Tk()
root.title("Tabs")
tabControl = ttk.Notebook(root)

tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tab3 = ttk.Frame(tabControl)

tabControl.add(tab1, text='tab1')
tabControl.add(tab2, text='tab2')
tabControl.add(tab3, text='tab3')
tabControl.pack(expand=1, fill="both")

canvas = Canvas(tab1, bg='white', width=100, height=100)
canvas.grid(column=0, row=5, columnspan=1, rowspan=1)

text_box = tk.Text(tab1, width=100, height=100, wrap=WORD)
text_box.grid(column=1, row=5, columnspan=1, rowspan=1)

root.mainloop()

标签: pythontkinter

解决方案


对于画布小部件,widthheight以像素为单位指定。对于您的画布,您选择了 100x100像素

对于文本小部件,widthheight以多个字符指定。对于您的文本小部件,您选择了 100x100 个字符

由于您使用的是grid,因此使它们具有相同大小的最佳方法是将网格定义为具有统一的列宽。由于小部件位于同一行,因此它们将在垂直方向上被赋予相同的空间。然后,当您让小部件填充它们所在的空间时,它们将具有相同的大小。

tab1.grid_columnconfigure((0,1), uniform=1, weight=1)
tab1.grid_rowconfigure(5, weight=1)

canvas.grid(column=0, row=5, sticky="nsew")
text_box.grid(column=1, row=5, sticky="nsew")

推荐阅读