Мне пришлось изучить python 3.3.3 для логики и дизайна. Я чрезвычайно новичок в программировании, и приведенный ниже код является кульминацией того, что ive узнал сам за 10 недель. У меня была нормальная работа программы на графическом интерфейсе. моя программа была типичным решателем скремблирования. У меня просто ужасное время с tkinter. Мне нужно, чтобы мой вход от входа в основной модуль выполнялся и вводил результаты в список. я даже отказался от передачи параметров из класса tot main, поэтому я установил стойку и результаты для глобального var. Я понимаю, что это может быть слишком много хлопот для кого-то, чтобы помочь, но любая помощь, которую я получаю, чтобы сделать это до финала, будет очень признательна. заранее спасибо.Проблемы с tkinter и scrabble solver
#only reason these are global is because im having trouble with tkinter and
#passing the proper parameters to the main module
global results
global rack
import tkinter as tk
#class for GUI
class application:
def __init__(self):
self.main=tk.Tk()
#top fram includes rack label, rack entry, rack enter button and quit button
self.top_frame = tk.Frame(self.main)
self.main.title('Scrabble Solver')
self.main.geometry('300x300')
self.main.wm_iconbitmap('favicon.ico')
self.racklbl = tk.Label(self.top_frame, text="Enter your rack")
self.racklbl.pack()
self.rackent=tk.Entry(self.top_frame)
self.rackent.pack(side="left")
self.rackbtn = tk.Button(self.top_frame, text = "Enter",
command=self.getRackData)
self.rackbtn.pack(side="left")
self.top_frame.pack()
#bottom frame includes listbox for results display and scrollbar
self.bot_frame = tk.Frame(self.main)
self.validlist = tk.Listbox(self.bot_frame, width=30)
self.validlist.pack(side="left")
self.scrollbar = tk.Scrollbar(self.bot_frame)
self.scrollbar.pack(side="right", fill="y")
self.QUIT = tk.Button(self.top_frame, text="QUIT", fg="red", command=self.main.destroy)
self.QUIT.pack(side='left')
self.bot_frame.pack()
tk.mainloop()
def showError(self):
tk.messagebox.showinfo('You have entered too many letters')
def getRackData(self):
rack = input(self.rackent.get())
def main():
rack=""
gui = application()
#dictionary for the scores
scores = {"A": 1, "C": 3, "B": 3, "E": 1, "D": 2, "G": 2,
"F": 4, "I": 1, "H": 4, "K": 5, "J": 8, "M": 3,
"L": 1, "O": 1, "N": 1, "Q": 10, "P": 3, "S": 1,
"R": 1, "U": 1, "T": 1, "W": 4, "V": 4, "Y": 4,
"X": 8, "Z": 10}
#get the rack letters
#rack = getRackLetters(gui)
#call module to put file into an array
rack = getRackLetters(rack,gui)
putFileIntoArray(rack, scores)
# function to get rack letters
def getRackLetters(rack,gui):
rack = rack.upper()
#call function to verify number of letters entered
verify= verifyRackLetters(rack)
if verify == True:
return rack
else:
gui.showError()
main()
#function to verify number of letters entered
def verifyRackLetters(rack):
if len(rack) <= 8:
verify = True
else:
verify = False
return verify
#module to put file into an array
def putFileIntoArray(rack, scores):
words = []
file = open("dict.dat", "r")
for line in file:
line = line.strip()
words.append(line)
file.close()
#call module to find and create an array of valid words then score them
findValidWords(words, scores)
# module to find and create an array of valid words then score them
def findValidWords(words, rack, scores):
valid = []
for word in words:
candidate = True
rack_letters = list(rack)
for letter in word:
if letter not in rack_letters:
candidate = False
else:
rack_letters.remove(letter)
#score the valid words and append to list
if candidate == True:
total = 0
for letter in word:
total = total + scores[letter]
valid.append([total, word])
#call module to sort and print the valid words list with scores
scoreValidWords(valid)
#module to sort and print the list
def scoreValidWords(valid):
valid.sort()
for entry in valid:
score = entry[0]
word = entry[1]
results.append(str(score) + " " + word)
print(results)
main()
Если вы используете класс (особенно имя d 'application'), чем положить все функции внутри и использовать' self.', тогда вам не понадобится 'global'. – furas
Я пробовал это как весь класс, но все равно не полезен –
Вы всегда должны запускать свой код, по крайней мере, при разработке, с терминала, на котором вы можете читать ошибки с момента сбоя программы. – kazagistar