0

我似乎无法让此文本上的滚动条起作用。文本会滚动到一定程度,但之后不会出现。我相信文本小部件的高度不是我想要的。例如,下图只显示了遗伝子实际结果的一半左右(我可以通过尝试从框架中间的一段文本拖动到底部来找到)。宽度也与我想要的框架大小不同:数字 23 只是看起来可行的东西。

如果我做

txt = tk.Text(self.SEARCH_RESULTS_TEXT_FRAME,width=self.SEARCH_RESULTS_FRAME_WIDTH,height=20,background='#d9d9d9',relief=RIDGE)

...宽度变得太大了。我原以为它只会占用框架的大小,即 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)

框架的相关图像。 请注意,它位于文本条目的后面(红色)

如何让文本小部件仅占用框架的宽度和框架的高度,从而允许滚动?

4

1 回答 1

1

如果我做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 乘以您正在使用的字体中的平均字符宽度。

如何让文本小部件仅占用框架的宽度和框架的高度,从而允许滚动?

为文本小部件设置宽度和高度 1,然后让几何管理器(packplacegrid)负责拉伸它以适合框架。

由于您使用的是place,您可以使用relwidthrelheight选项使其成为框架的完整大小:

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

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

于 2021-01-04T19:02:01.363 回答