修复文本小部件大小

2024-10-01 13:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经提出了申请,其中一部分涉及到输入一个问题和答案。我有这个密码:

import tkinter as tk
root = tk.Tk()
root.geometry("500x250")

#Main question/answer frame
createFrm = tk.Frame(root)
createFrm.pack(expand = True) #To centre the contents in the window


#Create question entry area
cnqFrm = tk.Frame(createFrm)
cnqFrm.pack()
cnqFrm.pack_propagate(False)

#Question entry
cnqLabQ = tk.Label(cnqFrm, text = "Question")
cnqLabQ.grid(column = 0, row = 0)
#Frame for question Text
cnqTxtQFrm = tk.Frame(cnqFrm, height = 100, width = 100)
cnqTxtQFrm.grid(column = 0, row = 1)
cnqTxtQFrm.grid_propagate(False)
#Question Text
cnqTxtQ = tk.Text(cnqTxtQFrm)
cnqTxtQ.pack()
cnqTxtQ.pack_propagate(False)

#Answer entry
cnqLabA = tk.Label(cnqFrm, text = "Answer")
cnqLabA.grid(column = 1, row = 0)
#Frame for answer text
cnqTxtAFrm = tk.Frame(cnqFrm, height = 100, width = 100)
cnqTxtAFrm.grid(column = 1, row = 1)
cnqTxtAFrm.grid_propagate(False)
#Answer Text
cnqTxtA = tk.Text(cnqTxtAFrm)
cnqTxtA.pack()
cnqTxtA.pack_propagate(False)

尽管文本小部件位于一个具有grid_propagate(False)和固定高度和宽度的框架中,并且文本小部件本身具有pack_propagate(False),但它仍然扩展到远大于它应该的大小。为什么会这样?我该怎么解决?你知道吗


Tags: textfalsecolumnrootframepacktkgrid
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:23

您没有给文本小部件显式的大小,因此它默认为40x80个平均大小的字符。最常见的方法是将它强制为由其父级确定的特定大小,即给它一个小于包含的小部件的大小,然后让gridpack展开它以适应给定的空间。因此,首先给文本小部件一个1(一)的宽度和高度。你知道吗

接下来,在这个特定的例子中,您在包含的框架上调用grid_propagate(False),但是您使用pack来管理窗口。如果您使用的是pack,那么应该调用pack_propagate。您还需要告诉pack展开文本小部件以填充其框架。你知道吗

最后,调用cnqTxtQ.pack_propagate(False)是没有意义的,因为它只影响文本小部件的子部件,而您没有给它子部件。你知道吗


尽管如此,我强烈建议您不要使用grid_propagate(False)pack_propagate(False)。Tkinter非常擅长安排小部件。与其试图强制文本小部件为特定的像素大小,不如将文本小部件设置为所需的行和字符大小,并让tkinter智能地安排其他所有内容与它们对齐。你知道吗

相关问题 更多 >