Tkinter 中消息小部件的滚动条

Scrollbar for Message Widget in Tkinter

我正在尝试将我之前用命令行编写的游戏转换为 GUI (https://github.com/abhinavdhere/Share-Trader-PC/releases/tag/v1.0) 我在一个框架中构建了一个类似按钮结构的菜单,然后在单击帮助时,前一框架 f1 应该消失并且应该显示帮助文本。我使用消息小部件来显示文本,但它很长并且需要滚动条。我试图添加一个垂直滚动条,但无法使其工作。我提到 python and tkinter: using scrollbars on a canvas 并尝试这样做,但它仍然只显示消息但没有滚动条。这是它的功能:

def help(self):
    self.f1.pack_forget()
    f2=tk.Frame(self,bg='#FFCC00')
    f2.grid(row=0,column=0)
    helpMan=open("Game Rules.txt","r")
    hText=helpMan.read()
    c1=tk.Canvas(f2,width=640,height=480,scrollregion=(0,0,700,500))
    c1.pack(side="left",expand=True,fill="both")
    text1=tk.Message(f2,text=hText)
    c1.create_window(0,0,anchor="nw",window=text1)
    scrollY=tk.Scrollbar(f2,orient="vertical",command=c1.yview)
    scrollY.pack(side="right",fill="y") 
    c1.config(yscrollcommand = scrollY.set)

P.S。为什么做一个简单的滚动条这么麻烦?

message 小部件不支持滚动。它缺少用于滚动协议的命令 yviewxview。它实际上只是一个多行标签。也很丑,不能做主题

您应该将 message 小部件替换为 text 小部件,该小部件还显示多行文本,并且可以支持滚动和格式化文本,如果需要,可以使用标签附加样式信息。

要使文本小部件看起来与消息小部件相同,应执行以下操作:

m = Message(root)
txt = Text(root, background=m.cget("background"), relief="flat",
    borderwidth=0, font=m.cget("font"), state="disabled")
m.destroy()