Как можно сделать более современный стиль у вкладок с помощью tkinter?
Пытаюсь реализовать вкладки у программы на tkinter (pywinstyles по неясным причинам упорно не ставится на комп с Win10 через pip install, на ноуте c Win11 поставился). В tkinter'e я новичок; ниже - код, который реализует подобие вкладок, но не совсем то, что хотелось получить.
from tkinter import *
window = Tk()
window.title("Тест")
window.geometry('400x250')
menu = Menu(window)
new_item = Menu(menu)
new_item.add_command(label='Новый')
new_item.add_separator()
new_item.add_command(label='Изменить')
menu.add_cascade(label='Файл', menu=new_item)
new_item1 = Menu(menu)
new_item1.add_command(label='О программе')
new_item1.add_separator()
new_item1.add_command(label='Изменить')
menu.add_cascade(label='О', menu=new_item1)
Фото тестовой программы с видом вкладок:
Хотелось бы получить результат, как у вкладок IDLE (см. сравнение на скриншоте).
Не уверен, но может быть, это можно сделать и на ttk
(с его помощью, например, удалось сделать кнопку в современном стиле, в отличие от tk
, реализация кнопок в котором напоминает примитивный стиль WinForms). Грубо говоря, подскажите, пожалуйста, как получить вкладки, выглядящие внешне более современно (в стиле WinUI). Если не сложно, приведите пример кода, буду очень признателен.
PS: Python 3.13
Ответы (1 шт):
Меню
Исходный код IDLE открытый. Можно самому посмотреть реализацию элементов. Также сам IDLE, если посмотреть исходный код, написан с помощью tkinter.
Меню подобное IDLE можно сделать достаточно просто:
import tkinter as tk
def new_file():
pass
def open_file():
pass
def save_file():
pass
def exit_app():
pass
def about():
pass
root = tk.Tk()
root.title("Application")
root.geometry("600x400")
menu_bar = tk.Menu(root)
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="Новый", command=new_file)
file_menu.add_command(label="Открыть", command=open_file)
file_menu.add_command(label="Сохранить", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="Выход", command=exit_app)
menu_bar.add_cascade(label="Файл", menu=file_menu)
help_menu = tk.Menu(menu_bar, tearoff=0)
help_menu.add_command(label="О программе", command=about)
menu_bar.add_cascade(label="Справка", menu=help_menu)
root.config(menu=menu_bar)
root.mainloop()
Стилизация
Если вы хотите получить более приятный глазу интерфейс, могу рекомендовать CustomTkinter - это оберёртка над Tkinter, которая позволяет кастомизировать элементы окна, а также поддерживает использование светлой и тёмной темы в зависимости от настроек системы. Из недостатков можно отметить низкую производительность.
Кроме того, tkinter поддерживает стилизацию. Это позволяет стилизовать каждый элемент. Стилизация доступна как на языке Tcl (документ о стилизации), так и внедрение стилей прямо в python коде, как описано в документации выше.
Несколько реализаций:
- Forest theme for ttk (GitHub)