Задать вопрос
  • Как правильно создать кнопку используя class, для открытия нового окна (без передачи аргументов, если это возможно)?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    1. Как верно заметил dim5x у метода pack() нет параметров x и y, поэтому вместо pack вы можете использовать place(). В данном случае btnSc.place(x=50, y=50)
    2. Зачем вы используете класс FuncButton если его методы не используют экземпляр класса? В этом нет никакого смысла. Но если уж очень хочется, то я рекомендовал бы использовать декоратор @staticmethod

    Все вместе получается так:
    код
    from tkinter import *
    import webbrowser
    
    class FuncButton:
    
        @staticmethod
        def btn1():
            pass
    
        @staticmethod
        def btn2():
            pass
    
        @staticmethod
        def btn3():
            pass
    
        @staticmethod
        def website():
            site_root = Tk()
            site_root.geometry('600x500')
            site_root.title('New window')
            site_root.resizable(width=False, height=False)
    
            btnSc = Button(site_root, text='Проба', bg='blue', font=('Arial', 16, 'bold'),
                           command=lambda: webbrowser.get(using=None).open_new_tab('https://www.youtube.com'))
            btnSc.place(x=50, y=50)  # Используем place вместо pack
    
            site_root.mainloop()
    
    main_root = Tk()
    main_root.geometry('600x500')
    main_root.title('Main window!')
    main_root.resizable(width=False, height=False)
    main_root.image = PhotoImage(file='BG.png')
    bg_logo = Label(main_root, image=main_root.image)
    bg_logo.grid(row=0, column=0)
    
    btnOne = Button(main_root, text='ONE', bg='yellow', font=('Arial', 16, 'bold'),
                    command=lambda: FuncButton.btn1())
    btnOne.place(x=88, y=155, width=195, height=40)
    
    btnTwo = Button(main_root, text='TWO', bg='red', font=('Arial', 16, 'bold'),
                    command=lambda: FuncButton.btn2())
    btnTwo.place(x=88, y=200, width=195, height=40)
    
    btnThree = Button(main_root, text='THREE', bg='pink', font=('Arial', 16, 'bold'),
                      command=lambda: FuncButton.btn3())
    btnThree.place(x=88, y=245, width=195, height=40)
    
    btnS = Button(main_root, text='WEBSITE', bg='lightgreen', font=('Arial', 16, 'bold'),
                  command=lambda: FuncButton.website())
    btnS.place(x=88, y=290, width=195, height=40)
    
    main_root.mainloop()
    Ответ написан
    1 комментарий
  • Как правильно создать кнопку используя class, для открытия нового окна (без передачи аргументов, если это возможно)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Решайте последовательно проблемы.
    Посмотрите, например, что у метода pack() нет таких параметров: https://metanit.com/python/tkinter/2.4.php
    Поменяйте на что-нибудь разрешённое: btnSc.pack(anchor=CENTER)
    И будет запускаться ваше окно с кнопкой на ютуб:
    675bcf788d595340062233.png
    Ответ написан
    2 комментария
  • Как закрыть файл (фотографию) после использования команды os.startfile?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Закрывайте приложение, которое открывает файл, как вариант:
    os.system('taskkill /IM Honeyview.exe') # <= поменяйте на ту программу что у вас ассоциирована с jpg.


    З.Ы. os.startfile() возвращает None, нет смысла присваивать переменной.
    Ответ написан
    5 комментариев