以下是我正在使用的代码:
import sys
from tkinter import *
from random import choice
def motiv():
motiv1 = mLabel = Label(text='Waste not, want not', fg="red").pack()
motiv2 = mLabel = Label(text='Sticks and stones', fg="red").pack()
motiv3 = mLabel = Label(text='Keep holding on', fg="red").pack()
motiv4 = mLabel = Label(text='Hold On, Pain Ends', fg="red").pack()
ranMotiv = [motiv1, motiv2, motiv3, motiv4]
print (choice(ranMotiv))
mGui = Tk()
mGui.geometry('450x450+500+150')
mGui.title('RMM')
mLabel = Label(text='Welcome to the Random Motivation Machine', fg="red").pack()
mButton = Button(text = "Click for Some Motivation", command = motiv)
mButton.pack()
mGui.mainloop()
没有错误,但是当我希望它只能随机打印出其中一个时,它会同时打印出所有这些文本。
我的目标是让某人按下按钮,然后在GUI窗口中弹出一个随机短语。
所以有人按下按钮,窗口中只显示四个文字短语中的一个:
1.不要浪费,不要。
2.Sticks and stones
3.坚持下去。
4.坚持下去,痛苦结束。
我相信我的麻烦来自这个地区:
ranMotiv = [motiv1, motiv2, motiv3, motiv4]
print (choice(ranMotiv))
有没有人有任何想法?这只是我的一个非常小的宠物项目。我只用了不到几个月的Python,所以我不是很精明。顺便说一句,我正在运行Python 3.2.5。提前谢谢大家。
答案 0 :(得分:1)
我最初将此作为评论发布,但结果却是答案,所以我在此处重新发布:
问题是Label(text='Waste not, want not', fg="red").pack()
立即打包标签。对所有标签执行此操作会导致它们被打包。如果您稍后调用random.choice
并不重要,因为标签已经打包到您的GUI中。
如果要从标签池创建随机标签,您要做的是:
def motiv():
myLabels = ['Waste not, want not', 'Sticks and stones', 'Keep holding on', 'Hold On, Pain Ends']
chosenLabel = random.choice(myLabels)
randMotiv = Label(text=chosenLabel, fg="red").pack()
答案 1 :(得分:0)
这个怎么样:
from tkinter import *
from random import choice
# Place the messages outside of the function so that they are not
# re-created each time the button is pressed
messages = ['Waste not, want not', 'Sticks and stones',
'Keep holding on', 'Hold On, Pain Ends']
def motiv():
# Just update the text of the Label instead of create a whole new one
message["text"] = choice(messages)
mGui = Tk()
mGui.geometry('450x450+500+150')
mGui.title('RMM')
mLabel = Label(text='Welcome to the Random Motivation Machine', fg="red").pack()
mButton = Button(text = "Click for Some Motivation", command = motiv)
mButton.pack()
# Make a Label to hold the messages that will be updated with each click of the button
message = Label(fg="red")
message.pack()
mGui.mainloop()
这种方法不仅仅是将新消息添加到GUI的底部,而是更清晰,只是更新消息的文本。它还修复了从GUI运行的消息问题(您可以通过单击按钮30次来看到这一点。)