Почему виджеты customtkinter интерактивны, но не видны?

Я пытаюсь создать простой пользовательский интерфейс, который позволяет пользователю выбирать каталог (в контексте этого проекта — каталог загрузки) и предоставляет кнопку, запускающую логику времени выполнения.

Тем не менее, когда я запускаю программу, создается окно и размещаются виджеты, они просто невидимы.

Я смог подтвердить, что они также являются интерактивными, используя пример кода, предоставленный официальной документацией customTkinter (CustomTkinter Documentation):

import customtkinter

def button_callback():
  print("button clicked")

app = customtkinter.CTk()
app.geometry("400x150")

button = customtkinter.CTkButton(app, text = "my button", command=button_callback)
button.pack(padx=20, pady=20)

app.mainloop()

Щелкнув вслепую по окну, я в конце концов нашел в этом случае невидимую кнопку, и консоль действительно дала правильный результат.

Я пробовал менять режимы внешнего вида и цвета, но безрезультатно. Это текущий код желаемого пользовательского интерфейса.

import os

import customtkinter as ctk
from tkinter import filedialog
from Organizer import Organizer

ctk.set_appearance_mode("light")
ctk.set_default_color_theme("blue")

class App(ctk.CTk):

  def __init__(self):
    super().__init__()

    self.organizer = None

    self.title("Download Organizer")
    self.geometry("500x300")

    self.columnconfigure(0, weight=1)
    self.columnconfigure(1, weight=1)
    self.columnconfigure(2, weight=1)
    self.rowconfigure(0, weight=1)

    self.entry_path = ctk.CTkEntry(self, width=300)
    self.entry_path.grid(row=0, column=0)

    self.button_browse = ctk.CTkButton(self, text = "Browse Directory",
                                       command=self.select_download_folder)
    self.button_browse.grid(row=0, column=1)

    self.button_action = ctk.CTkButton(self, text = "Submit",
                                       command=self.on_button_click)
    self.button_action.grid(row=0, column=2)

  def select_download_folder(self):
    folder_selected = filedialog.askdirectory(
      initialdir=os.path.expanduser("~/Downloads"))
    if folder_selected:
      self.entry_path.delete(0, ctk.END)
      self.entry_path.insert(0, folder_selected)
    self.organizer = Organizer(folder_selected)

  def on_button_click(self):
    if self.organizer is None:
      print("Please select a directory first.")
      return
    self.organizer.organize()

if __name__ == "__main__":
  app = App()
  app.mainloop()

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

Я написал это в PyCharm IDE в системе MacOS, если это поможет.

🤔 А знаете ли вы, что...
Python поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.


50
1

Ответ:

Решено

Тем не менее, когда я запускаю программу, создается окно и виджеты размещаются, они просто невидимы.

Вы не можете использовать старую версию. Попробуйте Python 3.12.5. Или лучше дождаться нового Python 3.14.0 до 10 октября 2024 года.