Проблема tkinter на Python3: происходит на Ma c OS X, а не на Windows 10 - PullRequest
0 голосов
/ 21 апреля 2020

, как гласит заголовок, один и тот же код, одна и та же версия Python 3 на обоих компьютерах, на одном работает Ma c OSX, на другом Win10.

Я в полной растерянности относительно того, почему это происходит, и я был бы очень признателен за объяснение того, что здесь происходит. Я не новичок в python кодировании, но я неопытен в tkinter и GUI design (в основном).

PS .: Он отлично работает на Windows 10 (т.е. выводит то, что я хочу), но не работает на Ma c OSX (т. Е. Нажимая кнопку «Выполнить» на GUI ничего не делает, очевидно; текстовое поле ввода отсутствует?).

Спасибо!

Вот что я получаю на Win 10 Here's what I get on Win 10

Вот что я получаю на Ма c OSX MacOSX

А вот мой код:

import tkinter as tk
import math as m
from tkinter import *

root= tk.Tk()
root.title('Cloze Generator')


frame = Frame(root)
frame.pack()

freq = Label(frame, text='Convert every how many words:')
freq.pack( side = LEFT )
#canvas.create_window(50, 100, window=freq)

fr = StringVar()
entry1 = Entry(frame, textvariable=fr)
entry1.pack( side = RIGHT)

canvas = tk.Canvas(root, width = 800, height = 700)
canvas.pack()

entry = tk.Text(root, height=15, width=90) 
canvas.create_window(400, 200, window=entry)

def cloze ():  
    x1 = entry.get('1.0','end')
    originalText = x1

    text = originalText.split()
    code = '{1:SHORTANSWER:='
    newText = ''
    i = 0
    fr = int(entry1.get())

    for word in text:
        i += 1
        if i % fr == 0:
            if word[-1] == '.':
                wordDot = word[:-1] 
                if len(wordDot) > 1: 
                    newWord = wordDot[:m.floor(len(word)/2)]
                    answer = wordDot[m.floor(len(word)/2):]
                    outWord = newWord + code + answer + '}'
                    newText += outWord + '. '
                else:
                    newText += word + '. '
            elif word[-1] == ',':
                wordDot = word[:-1] 
                if len(wordDot) > 1: 
                    newWord = wordDot[:m.floor(len(word)/2)]
                    answer = wordDot[m.floor(len(word)/2):]
                    outWord = newWord + code + answer + '}'
                    newText += outWord + ', '
                else:
                    newText += word + ', '        
            else:
                if len(word) > 1: 
                    newWord = word[:m.floor(len(word)/2)]
                    answer = word[m.floor(len(word)/2):]
                    outWord = newWord + code + answer + '}'
                    newText += outWord + ' '
                else:
                    newText += word + ' '
        else:
            newText += word + ' '

    outText = tk.Text(root, height=15, width=90)
    outText.insert(tk.END, newText)
    canvas.create_window(400, 500, window=outText)

button = tk.Button(text='Run', command=cloze)
canvas.create_window(50, 350, window=button)


root.mainloop()

1 Ответ

0 голосов
/ 21 апреля 2020

Текстовый виджет не пропущен. Он есть, но у него нет границы, а фон имеет тот же фон, что и его родитель, поэтому он сливается с фоном.

Для разных платформ значения виджетов по умолчанию различны. В OSX рельеф по умолчанию для текстового виджета "плоский", а ширина границы равна 0, тогда как в windows он "утонул" и равен 1.

Чтобы увидеть виджет, вы можете явно установить ширину границы и облегчение, если вы хотите, чтобы оно выглядело одинаково на обеих платформах:

entry = tk.Text(root, height=15, width=90, bd=1, relief="sunken")

PS: отлично работает на Windows 10 (т.е. выводит то, что я хочу), но не будет запустить на Ma c OSX (т. е. нажатие кнопки «запустить» на GUI ничего не делает, очевидно; текстовое поле ввода отсутствует?).

Я не могу продублировать это поведение. Когда я нажимаю кнопку «Выполнить» после вставки текста и ввода числа в виджет ввода, эта функция работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...