У меня возникли некоторые проблемы при программировании игры в палач с использованием tkinter, с отделенным внешним интерфейсом и внутренним интерфейсом, а также с использованием ООП (я понимаю, что использование ООП в бэкэнде не было действительно необходимым, и, вероятно, это было бы лучше как библиотека, но я делаю это как учебное упражнение). Я новичок в 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")
спасибо!