尝试将列表项添加到tkinter中的文本框中

时间:2018-01-07 02:40:18

标签: python tkinter insert textbox tkinter-entry

这是我的代码:

from tkinter import *
import random

root = Tk()

numbers = [0,1,2,3,4,5]

global AdviseBox
AdviseBox = Text(root, width=110, height=10)
AdviseBox.pack(side=RIGHT, expand=YES, padx=5, pady=5)

AdviseBox.insert(INSERT, "Your random number is:",(numbers[random.randint(0, len(numbers) - 1)]), "\n\nHappy?")

root.mainloop()

Output Currently

但我希望它在文本框中生成:

Your random number is: [RANDOM NUMBER HERE]

Happy?

我已经测试过查看print语句是否有效,而不是将文本插入到文本框中,print语句能够生成所需的输出。但是,似乎问题是文本框无法理解从列表中选择数字的部分。我尝试了其他变量,这是同样的问题。我不知道该怎么办,我想我已经尝试了一切! :(

1 个答案:

答案 0 :(得分:1)

insert方法采用可变数量的参数。第一个参数是索引,第二个参数是字符串。第三个(如果有的话)是 标记 。第四个是字符串,第五个是标签,第六个是字符串,第七个是标签,依此类推(索引,字符串,标签,字符串,标签,字符串......)

看看这行代码:

AdviseBox.insert(INSERT, "Your random number is:",(numbers[random.randint(0, len(numbers) - 1)]), "\n\nHappy?")

...使用多行,它与此相同:

AdviseBox.insert(
    INSERT,                                           # index
    "Your random number is:",                         # string
    (numbers[random.randint(0, len(numbers) - 1)]),   # tag
    "\n\nHappy?"                                      # string
)

你需要做的是把最后三个连在一起组成一个字符串。使用临时变量最容易做到。尝试将所有代码塞入单个语句中没有任何价值。另外,当您使用多行时,调试变得更容易,因为您可以检查所有中间值。

例如:

number = random.randint(0, len(numbers)-1)
s = "Your random number is: {}\n\nHappy?".format(number)
AdviseBox.insert(INSERT, s)

注意:由于您要从现有的数字列表中进行选择,而不是random.randint,您可以使用random.choice来更准确地反映您的意图:

number = random.choice(numbers)