我已经提出了申请,其中一部分涉及输入问题和答案。我有以下代码:
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)
,但它仍会扩展到远大于其应有的大小。为什么会这样,我该如何解决?
答案 0 :(得分:1)
您没有为文本小部件提供明确的大小,因此默认为40x80个平均大小的字符。将其强制为由其父级确定的特定大小的最常见方法是为其提供小于包含控件的大小的大小,然后让grid
或pack
对其进行扩展以适合其大小。给它的空间。因此,首先将文本小部件的宽度和高度设置为1(一)。
接下来,在这种特定情况下,您正在包含框架上调用grid_propagate(False)
,但是您正在使用pack
来管理窗口。如果您使用的是pack_propagate
,则应致电pack
。您还需要告知pack扩展文本小部件以填充其框架。
最后,调用cnqTxtQ.pack_propagate(False)
没有意义,因为这只会影响文本小部件的子级,而您没有为其指定任何子级。
所有这些,我强烈建议您不要使用grid_propagate(False)
和pack_propagate(False)
。 Tkinter非常擅长安排小部件。不要尝试将文本窗口小部件强制设置为特定的像素大小,而是将文本窗口小部件设置为所需的行和字符大小,然后让tkinter明智地安排其他所有内容以使其与它们对齐。