Программа предполагает изучение топ-1000 английских слов. Запускаешь, она выдает слово и 4 варианта ответа на кнопках. Пока просто делаю. Жмешь кнопку, она проверяет. Правильно - чекает слово, идем дальше, загружаем новое слово и результаты. Извещаем пользователя пока в консоли (на лейбл вывести не проблема - это потом сделаю). Неверно - извещает и грузит другое слово. Как грамотно перерисовывать окно - я пока не вполне понимаю. Пробовал в цикле это делать. Получается косяк - при правильном ответе открывается новое окно, старое же никуда не девается.
При неверном только извещение в консоли - вариант остается старый в окне.
Прошу подсказать, как заставить окно перерисовываться или закрываться в нужном месте.
В консоли у меня программа отрабатывала, как надо. Подозреваю, что проблема кроется в def check, но сам никак косяк не нащупаю.
Ниже код прилагается. Так же во вложении база и окно глейда. Извиняюсь за плохой код - я только учусь.
Безмерно благодарен буду за помощь.
#!/usr/bin/python3 from gi.repository import Gtk import random import os dt = [] with open('freq.dict', encoding='utf-8') as dt: dt = dt.read().splitlines() l = len(dt) # Кол-во строк в словаре x = 0 while x < int(l): # тут заполняем массив списком с числами L = [] for j in range(int(l)): L.append(x) x += 1 #Создаем вложенный список dic = [] for i in L: dic.append(dt[i].split("-")) # Разделяем части строки по дефису # Функция замены строки (нужна вся строка!) def ReplaceLineInFile(fileName, sourceText, replaceText): file = open(fileName, 'r') text = file.read() file.close() file = open(fileName, 'w') file.write(text.replace(sourceText, replaceText)) file.close() def check (word): ans = stack[int(word)-1][2] global ret if ans == ch[2]: print ("good))") # tr = ch[0] + "-" + ch[1] + "-" + ch[2] # Верно угаданная строка # ReplaceLineInFile ('freq.dict', tr, tr + ' - X') # os.system('clear') # continue ret = 0 else: print ("Wrong." + ch[1] + "-" + ch[2]) # con = input ('Do you want to repeat? (y/n)') # print ("") # if con == 'n' or 'N' or 'no' or 'No' or 'NO': # break ret = 1 ##################################### class okno: def on_window1_destroy(self, object, data=None): print ("quit with cancel") Gtk.main_quit() def on_clicked(self, widget): Gtk.main_quit() def on_button1_clicked(self, button, data=None): self.label1 = self.builder.get_object("label1") reply = 1 check (reply) if ret == 0: print ('!!!') Gtk.main_quit() def on_button2_clicked(self, button, data=None): self.label1 = self.builder.get_object("label1") reply = 2 check (reply) if ret == 0: print ('!!!') Gtk.main_quit() def on_button3_clicked(self, button, data=None): self.label1 = self.builder.get_object("label1") reply = 3 check (reply) if ret == 0: print ('!!!') Gtk.main_quit() def on_button4_clicked(self, button, data=None): self.label1 = self.builder.get_object("label1") reply = 4 check (reply) if ret == 0: print ('!!!') Gtk.main_quit() def update(self, widget, data=None): print ("Update") self.remove_window(self.window) reload(builder) self.window = self.builder.get_object("window1") self.window.show() def __init__(self): self.gladefile = "try-1.glade" self.builder = Gtk.Builder() self.builder.add_from_file(self.gladefile) self.builder.connect_signals(self) self.window = self.builder.get_object("window1") self.button1 = self.builder.get_object("button1") self.button1.set_label(str(rand1[2])) self.button1.connect("clicked", self.on_clicked) self.button2 = self.builder.get_object("button2") self.button2.set_label(str(rand2[2])) self.button3 = self.builder.get_object("button3") self.button3.set_label(str(rand3[2])) self.button4 = self.builder.get_object("button4") self.button4.set_label(str(rand4[2])) self.label1 = self.builder.get_object("label1") self.label1.set_text(str(ch[1])) self.window.show() # Здесь рандом while True: # # Создаем список из непройденных слов exclude = [] for line in dic: if len(line) != 4: exclude.append(line) # Дальше магия rand1 = random.choice(exclude) rand2 = random.choice(exclude) rand3 = random.choice(exclude) rand4 = random.choice(exclude) stack = [rand1, rand2, rand3, rand4] ch = random.choice(stack) print ("Word:" + ch[1] ) print ("options:") print ("[1] " + rand1[2] + "[2] " + rand2[2] + "[3] " + rand3[2] + "[4] " + rand4[2]) if __name__ == "__main__": main = okno() Gtk.main()