Форум сайта python.su
Проблема:
Когда открывается окно программы - текста нет вообще. Вводим, допустим, “2”. Получаем ответ положительный или отрицательный (не важно) под полем ввода. Над полем ввода появляется пример. Ответ на который мы дали.
Я не понимаю - как сделать так, что бы сперва появлялся пример, потом уже вводить ответ.
Пробовал запускать сперва функцию с рандомом и выводом, а потом уже функцию ввода ответа и его оценки. Но тогда он этот рандом вычисляет два раза. Ну и плюс при запуске программы поле с вопросом чистое. Ну это то ладно. Там кнопка “Проверка!” может выступить в роле кнопки “Начать!”. Это-то решимо, хотя хотелось бы знать решение, которое позволит вывести пример при запуске и потом уже выводить новые только после ввода ответа и клика по Enter.
Может нужен цикл? Пробовал, но ни чего не вышло.
До этого писал этот же скрипт (прошлое задание), но без графического интерфейса. всё вышло хорошо…
Собственно сам скрипт:
#!/usr/bin/ python3 # coding:utf8 from tkinter import * import random import time #+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= #=+=+=+=+=+=+=+=+= Ф У Н К Ц И И +=+=+=+=+=+=+=+= #+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= def ext(event): print('Проверка!') def close_win(event): root.destroy() def print_1(): label2.configure(text = 'Поздравляю!') def print_2(): label2.configure(text = 'Ошибка!') def random1(): a = random.randint(0,10) b = random.randint(0,10) label1.configure(text=str(a)+' x '+str(b)+' = ') result=a*b return(result) def caption(event): result = random1() t = entry1.get() if result == int(t): label2.configure(text = print_1()) else: label2.configure(text = print_2()) #+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= #+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= #+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= root = Tk() # Создаём главное окно frame1=Frame(root,bd=1) frame4=Frame(root,bd=1, width=50) frame5=Frame(root,bd=1) frame2=Frame(root,bd=1) frame3=Frame(frame2,bd=1,width=50) label2 = Label(frame5,width=40,height=5,fg='black',font='arial 12') label1 = Label(frame1,width=50,height=5,fg='black',font='arialblack 18') button1=Button(frame2,text='Выход',width=7,height=1,bg='lightgray',fg='black',font='arial 14') button2=Button(frame2,text='Проверка!',width=7,height=1,bg='lightgray',fg='black',font='arial 14') entry1 = Entry(frame4, width=12,font='Arial 14') #label1.bind('a', random1) entry1.bind('<Return>', caption) button1.bind('<Button-1>', close_win) root.bind('q', close_win) button2.bind('<Button-1>', ext) root.bind('z', ext) label1.pack() label2.pack() button1.pack(side='left') button2.pack(side='right') entry1.pack() frame1.pack() frame4.pack() frame5.pack() frame2.pack() frame3.pack(side='bottom') root.mainloop() # Завершение
Отредактировано Tenebras (Ноя. 20, 2017 23:54:27)
Офлайн
del
Отредактировано vic57 (Ноя. 21, 2017 01:18:06)
Офлайн
сделай классом и забей инициализацию в __init__
но как ты пишешь - убиться об угол
import tkinter as tk from random import sample class W(tk.Frame): def __init__(self,parent): tk.Frame.__init__(self,parent) self.pack(fill=tk.BOTH,expand=True) self.lblAns = tk.Label(self,bg="#def",text="Начнем?") self.lblAns.pack(fill=tk.BOTH,expand=True) self.lblQwe = tk.Label(self,bg="#fed") self.lblQwe.pack(fill=tk.BOTH,expand=True) frame = tk.Frame(self) self.entry = tk.Entry(frame) self.btn = tk.Button(frame,text='Ответ',command = self.check) self.entry.grid(row= 0,column=0) self.btn.grid(row=0,column=1) frame.pack() self.quest() def check(self): q1,q2 = self.lblQwe['text'].split('x') qwe = int(q1)*int(q2) try: ans = int(self.entry.get()) except: self.lblAns['text'] = "Ошибка ввода данных" return if qwe != ans: self.lblAns['text'] = "Ответ неверен. Повторите" else: self.lblAns['text'] = "Ответ верен" self.entry.delete(0,tk.END) self.quest() def quest(self): v1,v2 = sample(range(2,11),2) self.lblQwe['text']= str(v1)+'x'+str(v2) if __name__=="__main__": root = tk.Tk() app = W(root) root.mainloop()
Отредактировано vic57 (Ноя. 21, 2017 01:36:06)
Офлайн