Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2017 03:08:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Что не так, подскажите

rick
если не сложно, можно чуть подробнее про ее наследование, как это сделать и зачем?

Нашёл в инете форма и прикрепление формы от Sunderland93
# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(420, 301)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(420, 301))
MainWindow.setMaximumSize(QtCore.QSize(420, 301))
icon = QtGui.QIcon.fromTheme("drive-removable-media")
MainWindow.setWindowIcon(icon)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName("centralWidget")
self.label = QtWidgets.QLabel(self.centralWidget)
self.label.setGeometry(QtCore.QRect(10, 0, 59, 21))
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.centralWidget)
self.comboBox.setGeometry(QtCore.QRect(10, 20, 401, 32))
self.comboBox.setObjectName("comboBox")
self.label_2 = QtWidgets.QLabel(self.centralWidget)
self.label_2.setGeometry(QtCore.QRect(10, 60, 59, 18))
self.label_2.setObjectName("label_2")
self.toolButton = QtWidgets.QToolButton(self.centralWidget)
self.toolButton.setGeometry(QtCore.QRect(380, 80, 33, 34))
self.toolButton.setText("")
icon = QtGui.QIcon.fromTheme("document-open")
self.toolButton.setIcon(icon)
self.toolButton.setObjectName("toolButton")
self.label_3 = QtWidgets.QLabel(self.centralWidget)
self.label_3.setGeometry(QtCore.QRect(10, 120, 41, 18))
self.label_3.setObjectName("label_3")
self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
self.lineEdit.setGeometry(QtCore.QRect(10, 140, 201, 32))
self.lineEdit.setObjectName("lineEdit")
self.label_4 = QtWidgets.QLabel(self.centralWidget)
self.label_4.setGeometry(QtCore.QRect(220, 120, 71, 18))
self.label_4.setObjectName("label_4")
self.comboBox_3 = QtWidgets.QComboBox(self.centralWidget)
self.comboBox_3.setGeometry(QtCore.QRect(220, 140, 191, 32))
self.comboBox_3.setObjectName("comboBox_3")
self.comboBox_3.addItem("")
self.comboBox_3.addItem("")
self.comboBox_3.addItem("")
self.line = QtWidgets.QFrame(self.centralWidget)
self.line.setGeometry(QtCore.QRect(10, 180, 401, 16))
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.progressBar = QtWidgets.QProgressBar(self.centralWidget)
self.progressBar.setGeometry(QtCore.QRect(10, 210, 401, 23))
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName("progressBar")
self.cancelButton = QtWidgets.QPushButton(self.centralWidget)
self.cancelButton.setGeometry(QtCore.QRect(320, 260, 88, 34))
icon = QtGui.QIcon.fromTheme("dialog-cancel")
self.cancelButton.setIcon(icon)
self.cancelButton.setObjectName("cancelButton")
self.writeButton = QtWidgets.QPushButton(self.centralWidget)
self.writeButton.setGeometry(QtCore.QRect(230, 260, 88, 34))
icon = QtGui.QIcon.fromTheme("dialog-ok")
self.writeButton.setIcon(icon)
self.writeButton.setObjectName("writeButton")
self.aboutButton = QtWidgets.QPushButton(self.centralWidget)
self.aboutButton.setGeometry(QtCore.QRect(10, 260, 88, 34))
icon = QtGui.QIcon.fromTheme("help-about")
self.aboutButton.setIcon(icon)
self.aboutButton.setObjectName("aboutButton")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralWidget)
self.lineEdit_2.setGeometry(QtCore.QRect(10, 80, 361, 32))
self.lineEdit_2.setObjectName("lineEdit_2")
MainWindow.setCentralWidget(self.centralWidget)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "QImageWriter"))
self.label.setText(_translate("MainWindow", "Device:"))
self.label_2.setText(_translate("MainWindow", "ISO:"))
self.label_3.setText(_translate("MainWindow", "Label:"))
self.lineEdit.setText(_translate("MainWindow", "USB_STICK"))
self.label_4.setText(_translate("MainWindow", "Filesystem:"))
self.comboBox_3.setItemText(0, _translate("MainWindow", "FAT32"))
self.comboBox_3.setItemText(1, _translate("MainWindow", "NTFS"))
self.comboBox_3.setItemText(2, _translate("MainWindow", "EXT4"))
self.cancelButton.setText(_translate("MainWindow", "Cancel"))
self.writeButton.setText(_translate("MainWindow", "Write"))
self.aboutButton.setText(_translate("MainWindow", "About"))
#!/usr/bin/env python3

from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from mainwindow import *
import sys

class MainProg (Ui_MainWindow):
def __init__(self, window):
Ui_MainWindow.__init__(self)
self.setupUi(window)
self.aboutButton.clicked.connect(self.about)

def about(self):
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setWindowTitle('About')
msg.exec_()

if __name__ == '__main__':
app = QApplication(sys.argv)
window = QMainWindow()
prog = MainProg(window)
window.show()
sys.exit(app.exec_())

Когда ты наследуешься, всё содержимое формы наследуется и у класса появляются все атрибуты и методы формы. Если ты в дизайнере сделал кнопку, то после наследования ты можешь к ней обращаться, будто ты её создал в классе.

Вот у него self.aboutButton унаследована от формы и он прикрепляет сигнал от неё к слоту.



Отредактировано py.user.next (Июнь 7, 2017 03:15:03)

Офлайн

#2 Июнь 8, 2017 03:43:17

rick
Зарегистрирован: 2017-06-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так, подскажите

py.user.next
Разобрался немного, решил поэксперементировать на старом скрипте, слепил для него интерфейс, вроде все красиво, но ругается на QWidget в 9 и 11 строке, что там не так?

 # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'myinterface.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_MainWindow(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(632, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 131, 17))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(140, 7, 113, 24))
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 40, 68, 17))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(80, 40, 113, 24))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 70, 171, 17))
        self.label_3.setObjectName("label_3")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setGeometry(QtCore.QRect(180, 70, 113, 24))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 100, 231, 17))
        self.label_4.setObjectName("label_4")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setGeometry(QtCore.QRect(250, 100, 113, 24))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(260, 150, 101, 17))
        self.label_5.setObjectName("label_5")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_5.setGeometry(QtCore.QRect(10, 170, 611, 211))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(520, 400, 99, 27))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 632, 25))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Сумма внесения:"))
        self.label_2.setText(_translate("MainWindow", "Процент:"))
        self.label_3.setText(_translate("MainWindow", "Интервал начислений:"))
        self.label_4.setText(_translate("MainWindow", "Срок вклада(указать в месяцах):"))
        self.label_5.setText(_translate("MainWindow", "Начисления:"))
        self.pushButton.setText(_translate("MainWindow", "Вычислить"))
if __name__ == '__main__':
    app=QtGui.QGuiApplication(sys.argv)
    ex=Ui_MainWindow()
    ex.show()
    sys.exit(app.exec())



Находчивый питон проглотил двух разнополых кроликов.

Отредактировано rick (Июнь 8, 2017 03:44:19)

Офлайн

#3 Июнь 8, 2017 12:24:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Что не так, подскажите

rick
но ругается на QWidget в 9 и 11 строке, что там не так?
В PyQt5 QWidget находится в QtWidgets, а не в QtGui.
Здесь видно импорты.



Офлайн

#4 Июнь 9, 2017 16:49:04

rick
Зарегистрирован: 2017-06-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так, подскажите

Разобрался немного, все запускается, вычисляет, но в цикле проводит только одну итерацию и выводит, хотя, тот же код в консоли все верно просчитывает. Да и со сравнением значений в коде проблема, то ли присвоение переменной значения из текстового поля не верно делается, то ли в дальнейшем как то иначе надо делать. Помогите разобраться.
main.py

 # -*- coding: utf-8 -*-
import sys
# Импортируем наш интерфейс из файла
from myinterface import *
from PyQt5 import QtCore, QtGui, QtWidgets
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # Здесь прописываем событие нажатия на кнопку
        self.ui.pushButton.clicked.connect(self.MyFunction)
    #Функция
    def MyFunction(self):
        a = int(self.ui.lineEdit.text())
        b = float(self.ui.lineEdit_2.text())
        c = int(self.ui.lineEdit_3.text())
        d = int(self.ui.lineEdit_3.text())
        i=0
        if d < c:
            self.ui.textEdit.setText('Начислений нет, сумма за неполный период= '+str(a))
        elif d>=c:
            e = a
            n = d / c  # Сколько раз будет происходить начисление процентов за весь срок содержания суммы
            while i < n:  # Лимит
                e += (a * b / 100);i += 1  # Начисление процентов
                self.ui.textEdit.setText('Сумма за ' + str(i) + ' начисление = ' + str(e) + ' руб.\nРазница "внесение-начисление"= ' + str(int(e - a)) + ' руб.')
                #if i == n:
                   # self.ui.textEdit.setText('Разница "внесение-начисление"= ' + str(int(e - a)) + ' руб.')
if __name__=="__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())

myinterface.py
 # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'myinterface.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(632, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 131, 17))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(140, 7, 113, 24))
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 40, 68, 17))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(80, 40, 113, 24))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 70, 171, 17))
        self.label_3.setObjectName("label_3")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setGeometry(QtCore.QRect(180, 70, 113, 24))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 100, 231, 17))
        self.label_4.setObjectName("label_4")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_4.setGeometry(QtCore.QRect(250, 100, 113, 24))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(260, 150, 101, 17))
        self.label_5.setObjectName("label_5")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(520, 400, 99, 27))
        self.pushButton.setObjectName("pushButton")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(10, 180, 611, 211))
        self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 632, 25))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Сумма внесения:"))
        self.label_2.setText(_translate("MainWindow", "Процент:"))
        self.label_3.setText(_translate("MainWindow", "Интервал начислений:"))
        self.label_4.setText(_translate("MainWindow", "Срок вклада(указать в месяцах):"))
        self.label_5.setText(_translate("MainWindow", "Начисления:"))
        self.pushButton.setText(_translate("MainWindow", "Вычислить"))
Так выглядит форма:

Ну и код как он должен отрабатывать в консоли
 a=int(input("Сумма первого внесения= "))
b=float(input("Процент начисления= "))
c=int(input("Раз в сколько месяцев происходит начисление? "))
d=int(input("На какой срок вносится сумма (Указать количество месяцев) "))
i=0
if d<c:
    print('Начислений нет, сумма за неполный период= '+str(a))
elif d>=c:
    e=a
    n=d/c #Сколько раз будет происходить начисление процентов за весь срок содержания суммы
    while i<n:      #Лимит
        e+=(a*b/100);i+=1      #Начисление процентов
        print('Сумма за ' + str(i) + ' начисление = ' + str(e)+' руб.')  # Вывод
        if i==n:
            print('Разница "внесение-начисление"= '+str(int(e-a))+' руб.')



Находчивый питон проглотил двух разнополых кроликов.

Офлайн

#5 Июнь 10, 2017 02:35:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Что не так, подскажите

rick
но в цикле проводит только одну итерацию и выводит
Если так делать, то его нужно приплюсовывать к старому тексту: берёшь текст, который там есть, к нему плюсуешь новый текст, потом ставишь результат обратно.

И вот эти имена вроде self.ui.lineEdit_2 self.ui.lineEdit_3 надо переименовать конкретно (в форме меняешь, потом генерируешь заново код), чтобы только по имени можно было определить, за что отвечает это поле.
Это так же как с разделами на файловой системе делают: раньше были номера разделов и ссылались по ним; сейчас же делают длинный UUID, который прямо на раздел пишется, и какой бы у раздела номер ни был, он всегда точно отыскивается. Поэтому при переразбиении диска ничего не требуется менять в файлах настройки у загрузчика и других программ.



Отредактировано py.user.next (Июнь 10, 2017 02:36:51)

Офлайн

#6 Июнь 10, 2017 02:40:47

rick
Зарегистрирован: 2017-06-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так, подскажите

py.user.next
Дело в том что, игнорируется код оператора условия, он первый if почему то всегда пропускает и начинает печать второе условие, но без итераций.
я уже мозги сломал, как так может быть. Если в консоль печатает все красиво



Находчивый питон проглотил двух разнополых кроликов.

Офлайн

#7 Июнь 11, 2017 14:53:31

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Что не так, подскажите

rick
Дело в том что, игнорируется код оператора условия, он первый if почему то всегда пропускает и начинает печать второе условие, но без итераций.
а как оно у вас выполнится, если у вас d=c ??
  
       c = int(self.ui.lineEdit_3.text()) #допустим у вас в лайн_едит3 цифра 5,  с=5
       d = int(self.ui.lineEdit_3.text()) # d=5
       i=0
       if d < c:      # False d=c=5
            self.ui.textEdit.setText('Начислений нет, сумма за неполный период= '+str(a))
...........
      elif d>=c: # True d=c=5
       n = d / c  # Сколько раз будет происходить начисление процентов за весь срок содержания суммы
                     # n=5/5=1
            while i < n:  # Сколько раз отрботает цикл при n=1??



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 11, 2017 14:55:05)

Офлайн

#8 Июнь 11, 2017 16:44:57

rick
Зарегистрирован: 2017-06-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так, подскажите

PEHDOM
господи, не заметил что там одно и то же поле ввода случайно, там edit3 и edit 4



Находчивый питон проглотил двух разнополых кроликов.

Офлайн

#9 Июнь 12, 2017 00:17:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Что не так, подскажите

rick
не заметил что там одно и то же поле ввода случайно, там edit3 и edit 4
Переименуй поля, числовые поля (с числами в именах) задействуют другую систему мозга, более сложную для запоминания и вспоминания. Числа не дают образов, а мозг при работе с памятью оперирует образами.

Просто сравни
name_apple
name_tomato
и
name_12
name_15

Так что переименуй в форме это всё, чтобы виделись образы - смотришь на переменную и из имени сразу понимаешь, что это такое, не вспоминая ничего.



Офлайн

#10 Июнь 12, 2017 03:01:37

rick
Зарегистрирован: 2017-06-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Что не так, подскажите

py.user.next
Спасибо, попробую)
Подскажи пожалуйста, как вызвать форму из другой формы по нажатию на клавишу?



Находчивый питон проглотил двух разнополых кроликов.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version