我在python 3中用tkinter做了一个简单的游戏,其中包含了一个我做的函数,每当我点击一个按钮时,这个函数就会通过一个文本部分的字典。
new_pokemon_dictionary = {
"1": "It's a new pokemon!", "2": "Are you ready to fight it?"#, "3": "3rd piece of text etc
}
text_scroll_n=0
def next_button():
global text_scroll_n
textbox.delete(0.0, END)
text_scroll_n+=1 #Every time next_button run adds 1, this makes it print new part of the dictionary
if game_stage == 1:
text_scroll("new_pokemon_dictionary")
else:
return
textbox.insert(END, text_output)
screen.update()
通过点击下一个按钮 text_scroll_n
增加一,并由 text_scroll
函数来选择要显示的字典的新部分。
def text_scroll(dictionary):
if text_scroll_n<=len(dictionary):
print(dictionary)
text_output = dictionary[str(text_scroll_n)] #Textbox will insert at end of next_button function
else:
game_stage +=1
然而,当运行这个函数时,(以及其他部分的代码,如创建未显示的texbox),我得到了错误的提示。TypeError: string indices must be integers
. 我猜想这是因为它试图设置了 text_output
到信 dictionary
,其在单词中的位置等于text_scroll_n的整数。然而,当我把这一行替换成 text_output = dictionary[str(text_scroll_n)]
在 text_scroll
功能与 text_output = new_pokemon_dictionary[str(text_scroll_n)
识别new_pokemon_dictrionary变量是一个字典,工作得很完美。
有什么办法可以让我使用 text_scroll(dictionary)
在我的整个代码中,只是把不同的字典变量名,我想使用的paramater,或者是唯一的解决方法是重写所有不同的字典所需的代码?
我是新的编码,所以如果有任何的马虎,对不起。谢谢!我用tk做了一个简单的游戏。
因此,从我所知道的情况来看,真正发生的事情是你将字符串 "new_pokemon_dictionary"
至 text_scroll
函数,而不是字典中的 new_pokemon_dictionary
掉下引号的每一个 text_scroll
打电话给你,你应该是罚款。
所以这个...
if game_stage == 1:
text_scroll("new_pokemon_dictionary")
...变成了这个
if game_stage == 1:
text_scroll(new_pokemon_dictionary)
你想让代码根据传来的字符串选择合适的字典,应该是字典的名称吧?
你可以实现一个基于名称返回字典的函数,然后使用它。下面的代码将为你工作 -
dict_1={"name":"dict_1"}
dict_2={"name":"dict_2"}
def get_dict(name):
import sys
return sys.modules[__name__].__dict__[name]
if __name__ == "__main__":
print(get_dict("dict_1"))
print(get_dict("dict_2"))
在你的代码中,你可以用下面的方式来使用它----------。
text_scroll(get_dict("new_pokemon_dictionary"))