我正在尝试将之前用命令行编写的游戏转换为GUI(https://github.com/abhinavdhere/Share-Trader-PC/releases/tag/v1.0) 我在一个框架中构建了一个类似按钮结构的菜单,然后在单击帮助时,前一帧f1应该消失并显示帮助文本。我使用Message小部件来显示文本,但它很长,需要滚动条。我试图添加一个垂直滚动条但无法使其工作。我提到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。为什么制作一个简单的滚动条真是太麻烦了?
答案 0 :(得分:2)
message
窗口小部件不支持滚动。它缺少用于滚动协议的命令yview
和xview
。它实际上只是一个多线标签。它也很丑陋,无法成为主题。
您应该使用text
窗口小部件替换message
窗口小部件,该窗口小部件也会显示多行文字,并且可以使用标记支持滚动和格式化文本,以便在需要时附加样式信息。
要使文本小部件看起来与Message小部件相同,以下内容应该起作用:
m = Message(root)
txt = Text(root, background=m.cget("background"), relief="flat",
borderwidth=0, font=m.cget("font"), state="disabled")
m.destroy()