Tkinter:在 tk.Text 小部件中 height/width 缩放问题
Tkinter: Issue with height/width scaling in tk.Text widget
我似乎无法使此文本上的卷轴起作用。文本会滚动到一定程度,但之后不会出现。我相信文本小部件的高度不是我想要的。例如,下图只显示了遗伝子实际结果的一半左右(我可以通过尝试从框架中间的一段文字拖到底部来找到)。宽度也与我希望的框架大小不同:数字 23 只是看起来有效的东西。
如果我这样做
txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=self.SEARCH_RESULTS_FRAME_WIDTH,height=20,background='#d9d9d9',relief=RIDGE)
...宽度变得太大了。本来以为只占用frame的大小,也就是240
注意 SEARCH_RESULTS_TEXT_FRAME
是红色框。
相关代码:
#search text frame
self.SEARCH_RESULTS_FRAME_HEIGHT = 240 #240
self.SEARCH_RESULTS_FRAME_WIDTH = self.TITLE_FRAME_WIDTH - 23
self.SEARCH_RESULTS_TEXT_FRAME = Frame(self.SEARCH_RESULTS_FRAME,height=self.SEARCH_RESULTS_FRAME_HEIGHT,width=self.SEARCH_RESULTS_FRAME_WIDTH)
self.SEARCH_RESULTS_TEXT_FRAME.place(x=10,y=10,anchor = NW)
self.SEARCH_RESULTS_TEXT_FRAME.config(background ="#adadad")
def print_dict_to_frame(self,results_list):
txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=34,height=20,background='#d9d9d9',relief=RIDGE)
txt.place(x=0,y=0)
txt.tag_configure('header',justify = 'center',font=("Meiryo",12,'bold'))
txt.tag_configure('entry',font=('Meiryo',8))
for r_list in results_list:
header = r_list[0]
entry = r_list[1]
txt.insert(tk.END, "{}\n".format(header),'header')
for single_result in entry:
txt.insert(tk.END,single_result+"\n",'entry')
txt.configure(state=DISABLED)
如何让文本小部件只占用框架的宽度和框架的高度,允许滚动?
If I do txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=self.SEARCH_RESULTS_FRAME_WIDTH,height=20,background='#d9d9d9',relief=RIDGE) ... the width becomes much too large. I would have thought that it would only take up the size of the frame, which is 240.
width
选项以字符数而非像素数指定宽度。如果您使用值 240,则宽度将是 240 乘以您正在使用的字体中平均字符的宽度。
How can I get the text widget to only take up the width of the frame and the height of the frame, allowing for scrolling?
将文本小部件的宽度和高度设置为 1,然后让几何管理器(pack
、place
或 grid
)负责拉伸它以适应帧.
由于您使用的是 place
,因此您可以使用 relwidth
和 relheight
选项使其成为框架的完整尺寸:
txt.place(x=0,y=0, anchor="nw", relwidth=1.0, relheight=1.0)
就个人而言,我建议几乎在所有情况下都使用 pack
或 grid
。使用它们创建响应式 UI 比使用 place
.
更容易
我似乎无法使此文本上的卷轴起作用。文本会滚动到一定程度,但之后不会出现。我相信文本小部件的高度不是我想要的。例如,下图只显示了遗伝子实际结果的一半左右(我可以通过尝试从框架中间的一段文字拖到底部来找到)。宽度也与我希望的框架大小不同:数字 23 只是看起来有效的东西。
如果我这样做
txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=self.SEARCH_RESULTS_FRAME_WIDTH,height=20,background='#d9d9d9',relief=RIDGE)
...宽度变得太大了。本来以为只占用frame的大小,也就是240
注意 SEARCH_RESULTS_TEXT_FRAME
是红色框。
相关代码:
#search text frame
self.SEARCH_RESULTS_FRAME_HEIGHT = 240 #240
self.SEARCH_RESULTS_FRAME_WIDTH = self.TITLE_FRAME_WIDTH - 23
self.SEARCH_RESULTS_TEXT_FRAME = Frame(self.SEARCH_RESULTS_FRAME,height=self.SEARCH_RESULTS_FRAME_HEIGHT,width=self.SEARCH_RESULTS_FRAME_WIDTH)
self.SEARCH_RESULTS_TEXT_FRAME.place(x=10,y=10,anchor = NW)
self.SEARCH_RESULTS_TEXT_FRAME.config(background ="#adadad")
def print_dict_to_frame(self,results_list):
txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=34,height=20,background='#d9d9d9',relief=RIDGE)
txt.place(x=0,y=0)
txt.tag_configure('header',justify = 'center',font=("Meiryo",12,'bold'))
txt.tag_configure('entry',font=('Meiryo',8))
for r_list in results_list:
header = r_list[0]
entry = r_list[1]
txt.insert(tk.END, "{}\n".format(header),'header')
for single_result in entry:
txt.insert(tk.END,single_result+"\n",'entry')
txt.configure(state=DISABLED)
如何让文本小部件只占用框架的宽度和框架的高度,允许滚动?
If I do
txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=self.SEARCH_RESULTS_FRAME_WIDTH,height=20,background='#d9d9d9',relief=RIDGE) ... the width becomes much too large. I would have thought that it would only take up the size of the frame, which is 240.
width
选项以字符数而非像素数指定宽度。如果您使用值 240,则宽度将是 240 乘以您正在使用的字体中平均字符的宽度。
How can I get the text widget to only take up the width of the frame and the height of the frame, allowing for scrolling?
将文本小部件的宽度和高度设置为 1,然后让几何管理器(pack
、place
或 grid
)负责拉伸它以适应帧.
由于您使用的是 place
,因此您可以使用 relwidth
和 relheight
选项使其成为框架的完整尺寸:
txt.place(x=0,y=0, anchor="nw", relwidth=1.0, relheight=1.0)
就个人而言,我建议几乎在所有情况下都使用 pack
或 grid
。使用它们创建响应式 UI 比使用 place
.