Задать вопрос
Ответы пользователя по тегу Tkinter
  • Тkinter, после сборки pyinstaller не видит файл иконки, ошибка: bitmap "icon.ico" not defined. Как исправить?

    @eminsk
    программирую на python
    Проблема в том, что когда ты компилируешь приложение в один файл (--onefile), все ресурсы упаковываются внутрь исполняемого файла и извлекаются во временную директорию во время выполнения. Путь к файлу иконки уже не соответствует тому, что был в исходном проекте.
    Используй относительные пути с правильным флагом --add-data

    pyinstaller --name Analyzer --icon=icon.ico --add-data "icon.ico;." --noconsole --onefile main.py


    теперь твоя иконка будет добавлена в сам твой файл уже
    Лично таких проблем как у тебя не было у меня.

    И чтобы бы ты представлял правильность кода:
    import os
    import sys
    import tkinter as tk
    from PIL import Image, ImageTk
    
    class AppResources:
        def __init__(self, relative_path: str):
            self.relative_path = relative_path
            self.base_path = self._get_base_path()
            self.absolute_path = self._get_absolute_path()
        
        def _get_base_path(self) -> str:
            return sys._MEIPASS if hasattr(sys, '_MEIPASS') else os.path.abspath(".")
        
        def _get_absolute_path(self) -> str:
            return os.path.join(self.base_path, self.relative_path)
        
        def load_image(self) -> ImageTk.PhotoImage:
            return ImageTk.PhotoImage(Image.open(self.absolute_path))
    
    class App(tk.Tk):
        def __init__(self, icon_path: str):
            super().__init__()
            self.icon_path = icon_path
            self._setup_ui()
        
        def _setup_ui(self):
            self.title("Optimized Tkinter App")
            self.geometry("400x300")
            self._set_icon()
        
        def _set_icon(self):
            resources = AppResources(self.icon_path)
            icon = resources.load_image()
            self.iconphoto(True, icon)
    
    if __name__ == "__main__":
        app = App("icon.ico")
        app.mainloop()
    Ответ написан
    Комментировать
  • Как сделать так чтобы когда персонаж касался линии останавливался?

    @eminsk
    программирую на python
    Тебе нужно в функции __init__ описать переменную self.line_y = 370
    и переделать функцию с проверкой на касание с линией
    def tick(self):
        x1, y1, x2, y2 = self.coords(self.box)
        if y2 < self.line_y:  # 
            self.move(self.box, self.dx, self.dy)
        else:
            self.dx = 0
            self.dy = 0
        self.after(self.dt, self.tick)
    Ответ написан
    Комментировать
  • Как мне изменить шрифт на CustomTkinter?

    @eminsk
    программирую на python
    import customtkinter as ctk
    
    ctk.set_appearance_mode("dark")
    
    
    class App(ctk.CTk):
        def __init__(self):
            super().__init__()
    
            self.title("Delta Search")
            self.geometry("1050x630")
    
            self.button_frame_1 = ctk.CTkFrame(self,
                                               fg_color='#333333',
                                               border_width=2,
                                               corner_radius=10,
                                               border_color='#f53333',
                                               width=915,
                                               height=50,
                                               )
            self.button_frame_1.grid(row=0, column=0, padx=50, pady=10)
    
            # тут и меняется тебе сам объект  для шрифта
            custom_font = ctk.CTkFont(family="Arial", size=20, weight="bold")
    
            self.button = ctk.CTkButton(self.button_frame_1,
                                        fg_color='#454545',
                                        text='Universal search',
                                        width=150,
                                        height=40,
                                        border_color='#f53333',
                                        corner_radius=10,
                                        border_width=1,
                                        font=custom_font  # Применить тут шрифт
                                        )
            self.button.grid(row=0, column=0, padx=(20, 2), pady=10)
    
    
    app = App()
    app.mainloop()
    Ответ написан
    Комментировать