【问题标题】:Python Tkinter Frame flashing with Scrollbar带有滚动条的 Python Tkinter 帧闪烁
【发布时间】:2018-08-11 00:24:51
【问题描述】:

我正在尝试为我正在制作的基于终端的游戏创建一个关卡选择菜单。我让它将级别排序为十列,但我突然想到,随着级别的增加,菜单会变得非常宽。相反,我正在尝试制作一个可以滚动浏览的按字母顺序排列的列表。

我遵循了几篇关于制作可滚动框架的帖子的建议,但遇到了一个我以前从未见过的问题:窗口不断闪烁和闪烁。它只发生在我添加下面指示的那一行,但那一行 also 是使级别按钮出现的那一行。

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()

我删除了实际创建所有按钮的代码,因为它很长。如果需要,我可以添加它。

【问题讨论】:

标签: python tkinter scrollbar frame tkinter-canvas


【解决方案1】:

您不能在self.frame_levels 上同时使用create_windowpack,如果您使用self.frame_levels.pack,它将不会与画布的其余部分一起滚动。

您似乎还有一个问题,即您创建了一个作为self.frame_levels 子级的画布,然后您尝试将self.frame_levels 添加到画布中。

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多