我想每次都提示输入一个字母字符串来要求用户单击,并且只有在用户按下正确的键时游戏才会继续。
我在按键部分遇到了麻烦。我想在按钮上获取文本,并测试它是否与提示字母匹配,如果匹配,则输入小部件将提示下一个字母,否则它将保持静止。
我导入random来随机排列字母,以便每次生成不同的字母。我没有添加random.shuffle(alist)
,因为它不起作用。
这是我的代码:
from tkinter import *
from tkinter.ttk import *
import random
import tkinter
class KeyboardGame:
def __init__(self):
window = Tk()
window.title('haha')
self.value = StringVar()
self.value.set('click on any key to start...')
btm_frame = Frame(window, relief=RAISED)
entry = Entry(window, text=self.value)
entry.grid(row=0, column=0, padx=40, pady=5, sticky='EW')
for i in ['ixnsywfhze', 'uobpqgtav', 'lmjkcdr']:
frame1 = Frame(btm_frame)
for j in i:
button = Button(frame1, text=j, command=self.game)
button.pack(side=LEFT)
frame1.pack(padx=2, pady=2)
btm_frame.grid(row=1, column=0, padx=5, pady=5)
window.mainloop()
def game(self):
n = 0
alist = ['h', 'c', 'p', 'e', 'm', 'n', 'd']
self.value.set(alist[n])
while button['text'] != alist[n]:
self.value.set(alist[n])
n += 1
KeyboardGame()
最佳答案
您可以通过对创建的每个按钮binding
相同的事件来解决问题。
因此,在回调中,您将需要标识被单击的按钮(您的实际代码不执行此操作),以便使用cget()
方法将其文本与条目小部件的内容进行比较。
请注意,为了在n
中增加game()
,您需要将其呈现为instance variable。当它达到与alist
长度相同的值时,必须小心不要增加它。
完整程序
这是上述实现的想法。请注意,我只专注于解决您的问题。这意味着我不会评论您应该遵循的最佳实践:
from tkinter import *
from tkinter.ttk import *
import tkinter
class KeyboardGame:
def __init__(self):
window = Tk()
window.title('haha')
self.value = StringVar()
self.value.set('h')
self.btm_frame = Frame(window, relief=RAISED)
self.entry = Entry(window, text=self.value)
self.entry.grid(row=0, column=0, padx=40, pady=5, sticky='EW')
self.n = 0
for i in ['ixnsywfhze', 'uobpqgtav', 'lmjkcdr']:
self.frame1 = Frame(self.btm_frame)
for j in i:
button = Button(self.frame1, text=j)
button.pack(side=LEFT)
button.bind("<Button-1>", self.game)
self.frame1.pack(padx=2, pady=2)
self.btm_frame.grid(row=1, column=0, padx=5, pady=5)
window.mainloop()
def game(self, event):
alist = ['h', 'c', 'p', 'e', 'm', 'n', 'd']
w = event.widget # Identify the button
if w.cget("text") == self.value.get() and self.n < 6:
self.n = self.n + 1
self.value.set(alist[self.n])
# Start program
if __name__ =="__main__":
KeyboardGame()
演示版
这是上面运行的程序的屏幕截图:
关于python - Python Tkinter输入提示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38716453/