Я пытаюсь создать простой пользовательский интерфейс, который позволяет пользователю выбирать каталог (в контексте этого проекта — каталог загрузки) и предоставляет кнопку, запускающую логику времени выполнения.
Тем не менее, когда я запускаю программу, создается окно и размещаются виджеты, они просто невидимы.
Я смог подтвердить, что они также являются интерактивными, используя пример кода, предоставленный официальной документацией 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 поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.