Найти - Пользователи
Полная версия: GUI приложение.
Начало » Python для новичков » GUI приложение.
1
droft1312
Здрасте.Обучаюсь тут по книжке Доусона, и дошел до 10 главы(приложения с интерфейсом), прочитал немного, и решил сам написать программу
Смысл ее очень банален, она должна решать квадратное уравнение, и выводить его корни.
Код:
from tkinter import *
class Application(Frame):
	"""вычисление корней квадратного уравнения"""
	#Метод-конструктор
	def __init__(self, master):
		super(Application, self).__init__(master)
		self.grid()
		self.create_widgets()
	#Создание всех главных объектов
	def create_widgets(self):
		Label(self, text = 'Для решения вашего квадратного уравнения, введите нужные данные ниже, затем нажмите кнопку Sumbit').grid(row = 0, column = 0, columnspan = 3, sticky = W)
		Label(self, text = 'Коэф. а:').grid(row = 1, column = 0, sticky = W)
		self.factora = Entry(self)
		self.factora.grid(row = 1, column = 1, sticky = W)
		Label(self, text = 'Коэф. b:').grid(row = 2, column = 0, sticky = W)
		self.factorb = Entry(self)
		self.factorb.grid(row = 2, column = 1, sticky = W)
		Label(self, text = 'Коэф. с:').grid(row = 3, column = 0, sticky = W)
		self.factorc = Entry(self)
		self.factorc.grid(row = 3, column = 1, sticky = W)
		self.main_button = Button(self, text = 'Sumbit', command = self.reveal)
		self.main_button.grid(row = 4, column = 0, sticky = W)
		self.main_text = Text(self, width = 35, height = 40, wrap = WORD)
		self.main_text.grid(row = 6, column = 0, columnspan = 3, sticky = W )
		self.second_text = Text(self, width = 20, height = 20, wrap = WORD)
		self.second_text.grid(row = 7, column = 0, columnspan = 2, stiky = W)
	#Исполнительная часть
	def reveal(self):
		import math
		a_factor = int(self.factora)
		b_factor = int(self.factorb)
		c_factor = int(self.factorc)
		self.discr = b_factor**2 - 4*a_factor*c_factor
		if discr >= 0:
			x1 = (-b_factor - math.sqrt(discr))/2*a_factor
			x2 = (-b_factor + math.sqrt(discr))/2*a_factor
		elif discr < 0:
			x1 =  'Дискриминант меньше 0 => корней нет'
			x2 = None
		self.main_text.delete(0.0, END)
		self.main_text.insert(0.0, x1)
		self.second_text.delete(0.0, END)
		self.second_text.insert(0.0, x2)
#main
root = Tk()
root.title('Решение квадратных уравнений')
root.geometry('1280x720')
app = Application(root)
root.mainloop()  
Но после компиляции появляется вот такая бяка

Помогите найти ошибку, буду очень признателен.Заранее спасибо!
terabayt
1) from tkinter import *
так писать не надо! только для учебных целей и то старайтесь без этого
и на форум так не выкладывайте, а то придет один большой противник этого и попросит вас так больше не делать :)
2) нужно делать так
Label(text='text')
from tkinter import *
class Application(Frame):
    """вычисление корней квадратного уравнения"""
    #Метод-конструктор
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    #Создание всех главных объектов
    def create_widgets(self):
        Label(text='Для решения вашего квадратного уравнения, введите нужные данные ниже, затем нажмите кнопку Sumbit').grid(row = 0, column = 0, columnspan = 3, sticky = W)
        Label(text='Коэф. а:').grid(row = 1, column = 0, sticky = W)
        self.factora = Entry(self)
        self.factora.grid(row = 1, column = 1, sticky = W)
        Label(text='Коэф. b:').grid(row = 2, column = 0, sticky = W)
        self.factorb = Entry(self)
        self.factorb.grid(row = 2, column = 1, sticky = W)
        Label(text='Коэф. с:').grid(row = 3, column = 0, sticky = W)
        self.factorc = Entry(self)
        self.factorc.grid(row = 3, column = 1, sticky = W)
        self.main_button = Button(self, text = 'Sumbit', command = self.reveal)
        self.main_button.grid(row = 4, column = 0, sticky = W)
        self.main_text = Text(self, width = 35, height = 40, wrap = WORD)
        self.main_text.grid(row = 6, column = 0, columnspan = 3, sticky = W )
        self.second_text = Text(self, width = 20, height = 20, wrap = WORD)
        self.second_text.grid(row = 7, column = 0, columnspan = 2, sticky = W)
    #Исполнительная часть
    def reveal(self):
        import math
        a_factor = int(self.factora)
        b_factor = int(self.factorb)
        c_factor = int(self.factorc)
        self.discr = b_factor**2 - 4*a_factor*c_factor
        if discr >= 0:
            x1 = (-b_factor - math.sqrt(discr))/2*a_factor
            x2 = (-b_factor + math.sqrt(discr))/2*a_factor
        elif discr < 0:
            x1 =  'Дискриминант меньше 0 => корней нет'
            x2 = None
        self.main_text.delete(0.0, END)
        self.main_text.insert(0.0, x1)
        self.second_text.delete(0.0, END)
        self.second_text.insert(0.0, x2)
#main
root = Tk()
root.title('Решение квадратных уравнений')
root.geometry('1280x720')
app = Application(root)
root.mainloop() 
droft1312
terabayt
1) from tkinter import *так писать не надо! только для учебных целей и то старайтесь без этогои на форум так не выкладывайте, а то придет один большой противник этого и попросит вас так больше не делать 2) нужно делать так
А почему нельзя?В книжке вроде так делают.
Программа запускается, но свою задачу не выполняет , но и на этом спасибо
terabayt
droft1312
но свою задачу не выполняет
#-*- coding: utf-8 -*-
from tkinter import *
class Application(Frame):
    """вычисление корней квадратного уравнения"""
    #Метод-конструктор
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()
    #Создание всех главных объектов
    def create_widgets(self):
        Label(self, text='Для решения вашего квадратного уравнения,\nвведите нужные данные ниже,\nзатем нажмите кнопку Sumbit', justify='left').grid(row = 0, column = 0, columnspan = 2, sticky = W)
        Label(self, text='Коэф. а:').grid(row = 1, column = 0, sticky = W)
        self.factora = Entry(self)
        self.factora.grid(row = 1, column = 1, sticky = W)
        Label(self, text='Коэф. b:').grid(row = 2, column = 0, sticky = W)
        self.factorb = Entry(self)
        self.factorb.grid(row = 2, column = 1, sticky = W)
        Label(self, text='Коэф. с:').grid(row = 3, column = 0, sticky = W)
        self.factorc = Entry(self)
        self.factorc.grid(row = 3, column = 1, sticky = W)
        self.main_button = Button(self, text = 'Sumbit', command = self.reveal)
        self.main_button.grid(row = 4, column = 0, sticky = W)
        self.main_text = Text(self, width = 35, height = 1, wrap = WORD)
        self.main_text.grid(row = 5, column = 0, columnspan = 3, sticky = W )
        self.second_text = Text(self, width = 35, height = 1, wrap = WORD)
        self.second_text.grid(row = 6, column = 0, columnspan = 2, sticky = W)
    #Исполнительная часть
    def reveal(self):
        import math
        a_factor = int(self.factora.get())
        b_factor = int(self.factorb.get())
        c_factor = int(self.factorc.get())
        discr = b_factor**2 - 4*a_factor*c_factor
        if discr >= 0:
            x1 = (-b_factor - math.sqrt(discr))/(2*a_factor)
            x2 = (-b_factor + math.sqrt(discr))/(2*a_factor)
        elif discr < 0:
            x1 =  'Дискриминант меньше 0 => корней нет'
            x2 = None
        self.main_text.delete(0.0, END)
        self.main_text.insert(0.0, x1)
        self.second_text.delete(0.0, END)
        self.second_text.insert(0.0, x2)
#main
root = Tk()
root.title('Решение квадратных уравнений')
root.geometry('300x200')
app = Application(root)
root.mainloop() 
droft1312
А почему нельзя?В книжке вроде так делают.
поищите на форуме и погуглите
в книге для учебных целей, а на практике не-не!

P.S. я не сделал код правильным, а прост чтобы запустился!
droft1312
terabayt
Большое спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB