Решён
Как на Python сделать интерактивные кнопки в GUI?

Денис Воганов Python
6.1k
5

привет всем

учу питон третий месяц, решил сделать простенькое приложение с окошком где будут кнопки. нажимаешь кнопку - выполняется какое то действие (например открывается файл или пишется текст в поле)

в консоли все работает, а вот как сделать графический интерфейс с кнопками не пойму. гуглил но там столько вариантов что голова кругом - tkinter, pyqt, kivy, какой то dearpygui

мне не надо ничего сложного, просто окно с 3-4 кнопками. какую библиотеку взять и можно пример кода?

питон 3.12, винда 11

Решение
51
Эксперт • 5 ответов

Tkinter. Идет в комплекте с Python, ничего ставить не надо.

import tkinter as tk
from tkinter import filedialog

def open_file():
    path = filedialog.askopenfilename()
    if path:
        label.config(text=f"Выбран: {path}")

def say_hello():
    label.config(text="Привет, мир!")

def clear():
    label.config(text="")

root = tk.Tk()
root.title("Мое приложение")
root.geometry("400x200")

label = tk.Label(root, text="Нажми кнопку", font=("Arial", 14))
label.pack(pady=20)

btn_frame = tk.Frame(root)
btn_frame.pack()

tk.Button(btn_frame, text="Открыть файл", command=open_file).pack(side="left", padx=5)
tk.Button(btn_frame, text="Привет", command=say_hello).pack(side="left", padx=5)
tk.Button(btn_frame, text="Очистить", command=clear).pack(side="left", padx=5)

root.mainloop()

Скопируй, запусти, увидишь окно с тремя кнопками. command= привязывает функцию к нажатию. Все.

Аватар Лев Шапиро

tk.Button(..., bg="green", fg="white") - фон и цвет текста. Или через ttk.Style если хочешь красивее.

Аватар Денис Воганов

Заработало с первого раза! Спасибо, то что нужно было. А как поменять цвет кнопки?

34
Участник • 4 ответа

Tkinter для быстрого старта, тут выше все правильно написали. Но имей в виду его ограничения.

Tkinter выглядит как приложение из Windows 98. Если потом захочешь сделать что то красивое, современное, с анимациями, кастомными темами, придется переписывать на другую библиотеку.

Варианты по сложности:

Tkinter + customtkinter (пакет от Тома Шиманского). Ставится через pip install customtkinter. Тот же API что у tkinter, но виджеты выглядят современно. Для твоего уровня оптимальный вариант.

PyQt6 / PySide6. Промышленный стандарт. Можно рисовать интерфейс мышкой в Qt Designer и потом подключать логику на Python. Мощнее tkinter на порядок, но порог входа выше.

DearPyGui. Для инструментов, дашбордов, визуализации данных. Рендерит через GPU. Быстрый, но специфичный.

Kivy. Если планируешь мобильное приложение. Для десктопа overkill.

Мой совет: начни с customtkinter, когда упрешься в его лимиты - переходи на PySide6.

8
Эксперт • 5 ответов

Три месяца учишь питон и полез в GUI? Рановато.

Серьезно, ты ООП уже освоил? Понимаешь что такое callback? Event loop? Потому что GUI без понимания этих концепций превращается в копипаст со StackOverflow, который ты не можешь отдебажить когда ломается.

Сначала разберись с:

  1. Классами и наследованием
  2. Функциями как объектами первого класса (передача функции как аргумента)
  3. Замыканиями и lambda

Потом читай официальный туториал по tkinter. Не видео на ютубе, а документацию. docs.python.org/3/library/tkinter.html

Иначе через неделю придешь сюда с вопросом "почему кнопка вызывает функцию сразу при запуске а не по клику" и мы будем объяснять разницу между command=func и command=func().

5
Участник • 3 ответа

а зачем gui вообще? если задача простая, сделай веб-интерфейс на flask + html. три кнопки на html это 10 строк, flask тоже 10 строк, итого 20 строк без зависимостей от десктопных либ

from flask import Flask, request
app = Flask(__name__)

@app.route("/")
def index():
    return """
    <button onclick="fetch('/action1')">Кнопка 1</button>
    <button onclick="fetch('/action2')">Кнопка 2</button>
    <button onclick="fetch('/action3')">Кнопка 3</button>
    """

@app.route("/action1")
def action1():
    print("Нажата кнопка 1")
    return "ok"

app.run(debug=True)

открываешь localhost:5000 в браузере, жмешь кнопки. работает на любой ос без проблем с отображением

3
Участник • 1 ответ

помню мучился с такой же задачей, в итоге нашел на ютубе канал "Кодировщик" у него серия видосов по tkinter, прям пошагово с нуля объясняет, вроде там 8 или 9 уроков, мне хватило чтобы разобраться

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.