Python Tkinter 框架与滚动条一起闪烁
Python Tkinter Frame flashing with Scrollbar
我正在尝试为我正在制作的基于终端的游戏创建一个关卡选择菜单。我已经将级别分类为十列,但我突然想到,随着添加更多级别,菜单会变得非常宽。相反,我试图制作一个可以滚动浏览的字母列表。
我遵循了一些关于制作可滚动框架的帖子的建议,但我 运行 遇到了一个我以前从未见过的问题:window 不断闪烁并发出嘶嘶声。它只发生在我添加下面指示的行时,但是 也 是使级别按钮出现的行。
def show_levels(self, frames):
self.menu_title = tk.Label(self,
text=" Nonstop Robot ",
fg="blue"
)
if frames:
self.frame_levels = tk.Frame(self,
relief="sunken",
width=50,
height=100
)
self.level_canvas = tk.Canvas(self.frame_levels)
self.level_list = tk.Frame(self.level_canvas)
self.level_scroll = tk.Scrollbar(self.frame_levels,
orient="vertical",
command=self.level_canvas.yview
)
self.level_canvas.configure(yscrollcommand=self.level_scroll.set)
self.frame_menu = tk.Frame(self)
def level_bind(event):
self.level_canvas.configure(
scrollregion=self.level_canvas.bbox("all"),
width=70,
height=200
)
self.level_buttons = []
"""
Code that adds the buttons to all the frames.
"""
for b in self.level_buttons:
b.pack()
if frames:
self.level_scroll.pack(side="right", fill="y")
self.level_canvas.pack(side="left")
self.level_canvas.create_window((0, 0),
window=self.frame_levels,
anchor="nw"
)
self.frame_levels.bind("<Configure>", level_bind)
self.frame_levels.pack(side="bottom")
self.level_list.pack() # This is the line in question
self.frame_menu.pack(side="top")
self.menu_title.pack()
我删除了实际创建所有按钮的代码,因为它很长。如果需要,我可以添加。
您不能在 self.frame_levels
上同时使用 create_window
和 pack
,如果您使用 self.frame_levels.pack
,它不会与 self.frame_levels.pack
的其余部分一起滚动=20=].
您似乎还遇到了创建 canvas 的问题,它是 self.frame_levels
的子项,然后您尝试将 self.frame_levels
添加到 canvas.
我正在尝试为我正在制作的基于终端的游戏创建一个关卡选择菜单。我已经将级别分类为十列,但我突然想到,随着添加更多级别,菜单会变得非常宽。相反,我试图制作一个可以滚动浏览的字母列表。
我遵循了一些关于制作可滚动框架的帖子的建议,但我 运行 遇到了一个我以前从未见过的问题:window 不断闪烁并发出嘶嘶声。它只发生在我添加下面指示的行时,但是 也 是使级别按钮出现的行。
def show_levels(self, frames):
self.menu_title = tk.Label(self,
text=" Nonstop Robot ",
fg="blue"
)
if frames:
self.frame_levels = tk.Frame(self,
relief="sunken",
width=50,
height=100
)
self.level_canvas = tk.Canvas(self.frame_levels)
self.level_list = tk.Frame(self.level_canvas)
self.level_scroll = tk.Scrollbar(self.frame_levels,
orient="vertical",
command=self.level_canvas.yview
)
self.level_canvas.configure(yscrollcommand=self.level_scroll.set)
self.frame_menu = tk.Frame(self)
def level_bind(event):
self.level_canvas.configure(
scrollregion=self.level_canvas.bbox("all"),
width=70,
height=200
)
self.level_buttons = []
"""
Code that adds the buttons to all the frames.
"""
for b in self.level_buttons:
b.pack()
if frames:
self.level_scroll.pack(side="right", fill="y")
self.level_canvas.pack(side="left")
self.level_canvas.create_window((0, 0),
window=self.frame_levels,
anchor="nw"
)
self.frame_levels.bind("<Configure>", level_bind)
self.frame_levels.pack(side="bottom")
self.level_list.pack() # This is the line in question
self.frame_menu.pack(side="top")
self.menu_title.pack()
我删除了实际创建所有按钮的代码,因为它很长。如果需要,我可以添加。
您不能在 self.frame_levels
上同时使用 create_window
和 pack
,如果您使用 self.frame_levels.pack
,它不会与 self.frame_levels.pack
的其余部分一起滚动=20=].
您似乎还遇到了创建 canvas 的问题,它是 self.frame_levels
的子项,然后您尝试将 self.frame_levels
添加到 canvas.