Python:“选择”功能似乎不像我想要的那样工作。

时间:2013-07-27 21:33:56

标签: python python-3.x tkinter

以下是我正在使用的代码:

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。提前谢谢大家。

2 个答案:

答案 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次来看到这一点。)