Python 固定文本小部件大小

Python 固定文本小部件大小,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我已经提出了申请,其中一部分涉及到输入问题和答案。我有以下代码: 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 cn

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

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_propagateFalse和固定高度和宽度的框架中,并且文本小部件本身具有pack_propagateFalse,但它仍然会扩展到远远大于其应有的大小。这是为什么?我如何修复它?

您没有为文本小部件指定明确的大小,因此它默认为40x80个平均大小的字符。强制它使用由其父级确定的特定大小的最常见方法是,为它指定一个比包含的小部件小的大小,然后让grid或pack将其展开以适应给定的空间。因此,首先给文本小部件一个1的宽度和高度

接下来,在这个特定的例子中,您在包含的框架上调用grid_propagateFalse,但是您使用pack来管理窗口。如果使用pack,则应调用pack\u。您还需要告诉pack展开文本小部件以填充其框架

最后,调用cnqTxtQ.pack_.false没有任何意义,因为这只影响文本小部件的子部件,而您没有给它任何子部件


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

我尝试了这个,它只是让文本小部件的宽度为1乘1高,而不是100乘100。我试着改变父框架的背景,给它一个边框,看看文本小部件是否填充了它,边框环绕着文本小部件。出于某种原因,父框架与文本小部件的大小相同,即使父框架具有固定的宽度。为什么?我说的你都做了吗,包括cnqTxtQFrm.grid\u和cnqTxtA.pack?特金特是非常确定的。如果给容器一个宽度和高度,在该容器中关闭pack propagation,并且正确地打包一个小部件,它绝对会按照描述的那样工作。我将两个框架上的grid\u propagateFalse更改为pack\u propagate,并且没有给文本小部件指定大小,它工作得很好。谢谢你的帮助