【发布时间】:2020-04-20 21:18:43
【问题描述】:
正如标题所说,两台计算机上的代码相同,Python 3 版本相同,一台运行 Mac OSX,另一台运行 Win10。
我完全不知道为什么会发生这种情况,我非常感谢对这里发生的事情的一些解释。我对 python 编码并不陌生,但我对 tkinter 和 GUI 设计(大部分)缺乏经验。
PS.:它在 Windows 10 上运行良好(即输出我想要的),但它不会在 Mac OSX 上运行(即,在 GUI 上点击“运行”按钮显然什么也没做;缺少输入文本框?)。
谢谢!
这是我的代码:
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()
【问题讨论】:
-
.create_window:为什么要创建一个新窗口而不是使用现有窗口? -
如果问题出在文本小部件的外观上,我们不需要
cloze函数中的所有代码就本问题而言,我们是否需要? -
我添加了整个代码,因为它很短,所以人们可以运行它并理解我为什么做某些事情,比如创建一个新窗口,也因为我不知道 tkinter 在哪里生成奇怪的行为。有一个画布,画布上有四个窗口。一个窗口是输入(数字),秒是输入(文本),一个是按钮,一个是输出(只有在有输出时才显示)。
-
“我不知道 tkinter 在哪里产生了奇怪的行为。” - 这就是我们要求您创建 minimal reproducible example 的原因。这样做可以帮助您了解哪些代码产生了奇怪的行为。这就是您解决此类编程问题的方法。