Сломаное GUI в customtkinter

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023

В общем хотел сделать GUI-приложение, используя библиотеку CTK. Но появилась проблема: при запуске приложения интерфейс отображается некорректно. Сначала думал, что проблема в совместимости ComboBox-а с TabView, и заменил его на OptionMenu, но безуспешно.

Вот код:

import customtkinter as CTK
from PIL import Image




class App(CTK.CTk):
    def __init__(self):
        super().__init__()


        CTK.set_appearance_mode("System") #Тема
        CTK.set_default_color_theme("blue") #Цвет к теме



        self.geometry("720x450") #Ширина и высота
        self.title("Шифровщик/Дешифровщик") #Название
        self.resizable(False, False) #Маштабирование

        self.logo = CTK.CTkImage(dark_image=Image.open("module.png"), size=(96, 96)) #Импорт лого
        self.logo_label = CTK.CTkLabel(master=self, text="", image=self.logo)
        self.logo_label.grid(row=0, column=0, padx=310, pady=10) #Вставляю это лого

        self.tabview_one = CTK.CTkTabview(self, width=200)
        self.tabview_one.grid(row=1, column=0, padx=0, pady=(20, 0))
        self.tabview_one.add("Шифровать")
        self.tabview_one.tab("Шифровать").grid_configure(row=1, column=0, padx=10, pady=10, sticky="nsew")
        self.tabview_one.add("Дешифровать")
        self.tabview_one.tab("Дешифровать").grid_configure(row=1, column=0, padx=10, pady=10, sticky="nsew")

        self.optionbox1 = CTK.CTkOptionMenu(self.tabview_one.tab("Шифровать"), dynamic_resizing=False, values=[".ocb", ".obb", ".trk"])
        self.optionbox1.grid(row=0, column=0, padx=20, pady=(20, 0), sticky="nsew")

        self.button_shifr = CTK.CTkButton(self.tabview_one.tab("Шифровать"), text="Зашифровать")
        self.button_shifr.grid(row=3, column=0, padx=10, pady=50, sticky="nsew")



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

Вот картинка с тем, что должно получится при запуске: https://i.sstatic.net/TExnc.png

Вот module.png, если надо: https://i.sstatic.net/kEgyb.png

И ещё одно, можете подсказать, как заменить иконку у приложения в том же CTK.

Ответы

▲ 0Принят

Возможно вкладка ещё не успевает отобразиться в момент создания виджета, и он в свою очередь не получает инфу о размере контейнера родительского, можно попробовать вызвать update() после создания виджета, добавьте self.optionbox1.update()

Пример:

self.optionbox1.grid(row=0, column=0, padx=20, pady=(20, 0), sticky="nsew")
self.optionbox1.update()

Показать иконку можно при помощи self.wm_iconbitmap("icon.ico")