我如何将输入文本框的结果分配给一个变量,然后传递给后端的一个函数?
how i can assign the result of the entry textbox to a variable to then pass into a function in the backend?
我在使用 tkinter 编写刽子手游戏时遇到了一些问题,前端和后端是分开的,并且都使用 OOP(我知道在后端使用 OOP 并不是真正必要的,它可能会'作为一个图书馆已经更好了,但我把它作为一个学习练习来做)。我是 tkinter 的新手,我想知道如何将输入文本框的结果分配给一个变量,然后传递给后端的一个函数。我还想知道我的 self.letter_row 和 self.guesses_left 标签是否会在后端更新时更新,尽管我已经在 game_gui() 开始时将它们分配到前端,我不确定他们是否会自动执行此操作。这是所有的前端代码...
from tkinter import *
from tkinter.ttk import *
import hangmanSkeleton as hm
class game_gui():
def __init__(self,master):
self.master = master
master.title("Hangman")
this_game = hm.Hangman()
self.word = this_game.word
self.letter_row = this_game.letter_row
self.letters_guessed = this_game.letters_guessed
self.guesses_left = this_game.guesses_left
self.letter = StringVar()
self.lbl_word = Label(master, text = "Welcome to Hangman!")
self.lbl_word.grid(row = 0,padx = 10 , pady = 15, columnspan = 2)
self.lbl_row = Label(master, text = self.letter_row)
self.lbl_row.grid(row = 1, column = 0, padx = 15, pady = 10)
self.lbl_guesses = Label(master, text = "Guesses Left: " + str(self.guesses_left))
self.lbl_guesses.grid(row = 1, column = 1, padx = 15, pady = 10)
self.entry_letter= Entry(master, textvariable = self.letter)
self.entry_letter.grid(row = 2, padx = 10, pady = 20, columnspan = 2)
self.guess_button = Button(master, text = "Guess Letter", command=lambda: this_game.guess_letter(self.letter))
self.guess_button.grid(row = 3, padx = 10, pady = 10, columnspan = 2)
root = Tk()
gui = game_gui(root)
root.mainloop()
这只是我试图在上面的 self.guess_button() 中开始工作的后端函数..
def guess_letter(self, letter):
try:
if type(letter) != str or len(letter) != 1 or letter not in ascii_lowercase:
raise TypeError
if letter in self.letters_guessed:
raise ValueError
elif letter in self.word:
for count in range (len(self.word)):
if letter==self.word[count]:
self.letter_row = self.letter_row[0:count] + letter + self.letter_row[count+1:]
else:
pass
self.guesses_left = self.guesses_left-1 #take one away from guesses
except TypeError:
print("Value given is not a letter")
except ValueError:
print("Letter has already been guessed")
谢谢!
Comment: I still can't get my labels self.letter_row and self.guesses_left to update though
是的,这些变量未绑定到 Label
,我建议改用 Label.configure(text=...
。
注意:我只显示.this_game.letter_row
!
添加函数 update_labels(...
和 .configure(...
标签文本:
def update_labels(self):
self.lbl_row.configure(text=self.this_game.letter_row)
# and so on
在 last 在 .__init__(...
and .guess_letter(...
.
中调用此函数
根本不需要变量 self.letter_row
。
Question: how i can assign the result of the entry textbox to a variable to then pass into a function in the backend.
更改以下内容:
使您的变量 this_game
成为 class game_gui
的成员
self.this_game = hm.Hangman()
将辅助方法 guess_letter(...
添加到 class game_gui
。
把信传给.this_game.guess_letter(...
.
清除 .letter
.
中的字母
def guess_letter(self, letter):
self.this_game.guess_letter(letter.get())
letter.set('')
更改command
,指向辅助方法:
..., command=lambda: self.guess_letter(self.letter)
我在使用 tkinter 编写刽子手游戏时遇到了一些问题,前端和后端是分开的,并且都使用 OOP(我知道在后端使用 OOP 并不是真正必要的,它可能会'作为一个图书馆已经更好了,但我把它作为一个学习练习来做)。我是 tkinter 的新手,我想知道如何将输入文本框的结果分配给一个变量,然后传递给后端的一个函数。我还想知道我的 self.letter_row 和 self.guesses_left 标签是否会在后端更新时更新,尽管我已经在 game_gui() 开始时将它们分配到前端,我不确定他们是否会自动执行此操作。这是所有的前端代码...
from tkinter import *
from tkinter.ttk import *
import hangmanSkeleton as hm
class game_gui():
def __init__(self,master):
self.master = master
master.title("Hangman")
this_game = hm.Hangman()
self.word = this_game.word
self.letter_row = this_game.letter_row
self.letters_guessed = this_game.letters_guessed
self.guesses_left = this_game.guesses_left
self.letter = StringVar()
self.lbl_word = Label(master, text = "Welcome to Hangman!")
self.lbl_word.grid(row = 0,padx = 10 , pady = 15, columnspan = 2)
self.lbl_row = Label(master, text = self.letter_row)
self.lbl_row.grid(row = 1, column = 0, padx = 15, pady = 10)
self.lbl_guesses = Label(master, text = "Guesses Left: " + str(self.guesses_left))
self.lbl_guesses.grid(row = 1, column = 1, padx = 15, pady = 10)
self.entry_letter= Entry(master, textvariable = self.letter)
self.entry_letter.grid(row = 2, padx = 10, pady = 20, columnspan = 2)
self.guess_button = Button(master, text = "Guess Letter", command=lambda: this_game.guess_letter(self.letter))
self.guess_button.grid(row = 3, padx = 10, pady = 10, columnspan = 2)
root = Tk()
gui = game_gui(root)
root.mainloop()
这只是我试图在上面的 self.guess_button() 中开始工作的后端函数..
def guess_letter(self, letter):
try:
if type(letter) != str or len(letter) != 1 or letter not in ascii_lowercase:
raise TypeError
if letter in self.letters_guessed:
raise ValueError
elif letter in self.word:
for count in range (len(self.word)):
if letter==self.word[count]:
self.letter_row = self.letter_row[0:count] + letter + self.letter_row[count+1:]
else:
pass
self.guesses_left = self.guesses_left-1 #take one away from guesses
except TypeError:
print("Value given is not a letter")
except ValueError:
print("Letter has already been guessed")
谢谢!
Comment: I still can't get my labels self.letter_row and self.guesses_left to update though
是的,这些变量未绑定到 Label
,我建议改用 Label.configure(text=...
。
注意:我只显示.this_game.letter_row
!
添加函数 update_labels(...
和 .configure(...
标签文本:
def update_labels(self):
self.lbl_row.configure(text=self.this_game.letter_row)
# and so on
在 last 在 .__init__(...
and .guess_letter(...
.
中调用此函数
根本不需要变量 self.letter_row
。
Question: how i can assign the result of the entry textbox to a variable to then pass into a function in the backend.
更改以下内容:
使您的变量
的成员this_game
成为class game_gui
self.this_game = hm.Hangman()
将辅助方法
中的字母guess_letter(...
添加到class game_gui
。
把信传给.this_game.guess_letter(...
.
清除.letter
.def guess_letter(self, letter): self.this_game.guess_letter(letter.get()) letter.set('')
更改
command
,指向辅助方法:..., command=lambda: self.guess_letter(self.letter)