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,然后让几何管理器(packplacegrid)负责拉伸它以适应帧.

由于您使用的是 place,因此您可以使用 relwidthrelheight 选项使其成为框架的完整尺寸:

txt.place(x=0,y=0, anchor="nw", relwidth=1.0, relheight=1.0)

就个人而言,我建议几乎在所有情况下都使用 packgrid。使用它们创建响应式 UI 比使用 place.

更容易