Я создал несколько графических интерфейсов, используя tkinter в python (3.7), и я заметил, что когда некоторые из виджетов выбираются при запуске на Mac (ventura 13.3.1 m2 mac mini), они показывают странный всплеск подсветки на левой стороне.
Мой код прост, но вот пример кнопки, чтобы вы знали, что я не делаю ничего сумасшедшего:
import multiprocessing as mp
import os
import platform
from tkinter import ttk, Tk
def run_program():
print("Run command ran")
def main():
# This initializes the GUI
root = Tk()
root.title('COD_FISH Input')
# create a notebook (the pages)
notebook = ttk.Notebook(root)
notebook.pack(pady=10, padx=10, expand=True, fill='both')
main_frame = ttk.Frame(root)
button = ttk.Button(main_frame, text='Submit', command=run_program)
button.grid(column=0, row=13, sticky='se', padx=5, pady=5)
# makes it so that hitting 'Enter' triggers the submit button.
button.bind('<Return>', run_program)
# This tries to see if the program is being run on windows and
# if so changes a setting which improves the resolution of the GUI
if os.name == 'nt':
from ctypes import windll
windll.shcore.SetProcessDpiAwareness(1)
# This is what constantly updates the window.
root.mainloop()
# This protects the script from running many times! Not sure why it would do that though
# since it isn't called anywhere else...
if __name__ == "__main__":
# And this prevents the pyinstaller .exe file from opening the window many times
# due to incompatibility with multiprocessing
mp.freeze_support()
# Specific multithreading fix for Macs
if platform.system() == "Darwin":
mp.set_start_method('spawn')
main()
Я что-то делаю не так? Или есть что-то, что я могу добавить, чтобы удалить этот странный артефакт?
Я запустил это на питоне 3.7. Я пробовал с 3.11, и он все еще присутствовал (а также были проблемы с темным режимом, с появлением белого текста на белом фоне)
Предоставьте подробную информацию об отладке, включая дистрибутив Python, версию Python и т. д. Пробовали ли вы последний официальный дистрибутив?
Я разрабатываю этот код для работы с Mac и Windows, поэтому я бы предпочел не редактировать каждый виджет для каждой ОС или делать беспорядочные утверждения if import
. Я запустил это на питоне 3.7. Я только что попробовал с 3.11, и это было на самом деле хуже из-за того, что мой Mac был в темном режиме, а текст был белым на белом фоне для некоторых виджетов. Также артефакт все еще присутствовал в 3.11.
tkmacosx исправляет проблемы с кнопками даже в темном режиме, но в этом пакете нет записей. Я надеялся, что это можно будет решить в коде tkinter или какой-нибудь модификации, которую я мог бы внести.
Какой дистрибутив вы используете? Я попробовал официальную и она отлично работает на моей Ventura 13.2.1. Я предполагаю, что вы используете неправильную библиотеку Tcl/Tk.
Использование дистрибутива исправило это, хотя это было очень сложно сделать, так как я привык использовать среду conda. Мне пришлось открыть исполняемый файл python вручную и установить необходимые пакеты, используя python-3.11 -m pip install и т. д. Спасибо!
После проверки различных версий Python самая последняя версия Python хорошо работала на Mac. Так что просто обратите внимание, что для текущих компьютеров Mac, чтобы заставить tkinter работать хорошо, вам понадобится самый последний python и Tk.
from tkmacosx import Button
Удалитьttk.Button
вButton