Tkinter показывает странный артефакт на Mac

Я создал несколько графических интерфейсов, используя 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, и он все еще присутствовал (а также были проблемы с темным режимом, с появлением белого текста на белом фоне)

from tkmacosx import Button Удалить ttk.Button в Button
toyota Supra 15.04.2023 14:23

Предоставьте подробную информацию об отладке, включая дистрибутив Python, версию Python и т. д. Пробовали ли вы последний официальный дистрибутив?

relent95 16.04.2023 04:00

Я разрабатываю этот код для работы с Mac и Windows, поэтому я бы предпочел не редактировать каждый виджет для каждой ОС или делать беспорядочные утверждения if import. Я запустил это на питоне 3.7. Я только что попробовал с 3.11, и это было на самом деле хуже из-за того, что мой Mac был в темном режиме, а текст был белым на белом фоне для некоторых виджетов. Также артефакт все еще присутствовал в 3.11.

Ryguy 16.04.2023 18:35

tkmacosx исправляет проблемы с кнопками даже в темном режиме, но в этом пакете нет записей. Я надеялся, что это можно будет решить в коде tkinter или какой-нибудь модификации, которую я мог бы внести.

Ryguy 16.04.2023 18:49

Какой дистрибутив вы используете? Я попробовал официальную и она отлично работает на моей Ventura 13.2.1. Я предполагаю, что вы используете неправильную библиотеку Tcl/Tk.

relent95 17.04.2023 04:10

Использование дистрибутива исправило это, хотя это было очень сложно сделать, так как я привык использовать среду conda. Мне пришлось открыть исполняемый файл python вручную и установить необходимые пакеты, используя python-3.11 -m pip install и т. д. Спасибо!

Ryguy 17.04.2023 20:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После проверки различных версий Python самая последняя версия Python хорошо работала на Mac. Так что просто обратите внимание, что для текущих компьютеров Mac, чтобы заставить tkinter работать хорошо, вам понадобится самый последний python и Tk.

Другие вопросы по теме