Как убрать пробел между кнопками в tkinter?

#python #tkinter

#python #tkinter

Вопрос:

В моем приложении я вижу много места между цветными кнопками, которые мне на самом деле не нужны, как я могу их удалить? Я попытался использовать button.pack(pady=0) для кнопок, но это не дало никакого эффекта

Скриншот моего приложения tkinter, показывающий большой разрыв между кнопками

Я добавил сюда свой код и попытался поместить только соответствующие части кода

Я добавил холст, чтобы добавить к нему полосу прокрутки. И я использовал кнопки, потому что хочу добавить метод, который показывает страницу, на которой задача может быть отредактирована / удалена.

 class TodoFrame(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)

        self.canvas = Canvas(self)
        self.scrollbar = Scrollbar(self, orient="vertical", command=self.canvas.yview)
        task_frame = Frame(self.canvas, height=self.winfo_height()-100)
        task_frame.pack(fill="x", expand=True)
        self.canvas.create_window(0, 0, anchor='center', window=task_frame, width=self.winfo_width(), height=self.winfo_height()-100)

        priority_colors = ("#00CED1", "#00FA9A", "#FF6347", "#B0C4DE")  # colors for buttons
        # the db.fetch_incomplete_tasks() fetches tasks from mysql database
        # and returns a list of tuples containing title, description, priority and completion status of the task
        self.incomplete_tasks = sorted(db.fetch_incomplete_tasks(), key=lambda x: x[2])  # sorting list by priority
        if self.incomplete_tasks:
            incomplete_task_label = Label(task_frame, text="Incomplete Tasks", font=('calibri', 16))
            incomplete_task_label.pack(padx=(50, 0), anchor="center")
            
            for task in self.incomplete_tasks:
                title, description, priority, status = task
                task_btn = Button(task_frame, text=title, bg=priority_colors[priority-1], bd=0, width=25, wraplength=400, justify="left", pady=5)
                task_btn.pack(expand=True, padx=(50,0))

  

Комментарии:

1. Этот код не будет выполняться по ряду причин.

2. @BryanOakley например?

3. @BryanOakley Я думаю, я понял, почему вы так сказали, поэтому я отредактировал свой код, чтобы включить классы, очень сожалею о путанице, которую я мог вызвать

Ответ №1:

Итак, проблема заключалась в том, что я установил высоту холста в этой строке self.canvas.create_window(0, 0, anchor='center', window=task_frame, width=self.winfo_width(), height=self.winfo_height()-100)

что привело к образованию дополнительного пространства, а пространство между кнопками должно было заполнить этот пробел