Найти - Пользователи
Полная версия: Что не так, подскажите
Начало » GUI » Что не так, подскажите
1 2
py.user.next
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 унаследована от формы и он прикрепляет сигнал от неё к слоту.
rick
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())
py.user.next
rick
но ругается на QWidget в 9 и 11 строке, что там не так?
В PyQt5 QWidget находится в QtWidgets, а не в QtGui.
Здесь видно импорты.
rick
Разобрался немного, все запускается, вычисляет, но в цикле проводит только одну итерацию и выводит, хотя, тот же код в консоли все верно просчитывает. Да и со сравнением значений в коде проблема, то ли присвоение переменной значения из текстового поля не верно делается, то ли в дальнейшем как то иначе надо делать. Помогите разобраться.
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))+' руб.')
py.user.next
rick
но в цикле проводит только одну итерацию и выводит
Если так делать, то его нужно приплюсовывать к старому тексту: берёшь текст, который там есть, к нему плюсуешь новый текст, потом ставишь результат обратно.

И вот эти имена вроде self.ui.lineEdit_2 self.ui.lineEdit_3 надо переименовать конкретно (в форме меняешь, потом генерируешь заново код), чтобы только по имени можно было определить, за что отвечает это поле.
Это так же как с разделами на файловой системе делают: раньше были номера разделов и ссылались по ним; сейчас же делают длинный UUID, который прямо на раздел пишется, и какой бы у раздела номер ни был, он всегда точно отыскивается. Поэтому при переразбиении диска ничего не требуется менять в файлах настройки у загрузчика и других программ.
rick
py.user.next
Дело в том что, игнорируется код оператора условия, он первый if почему то всегда пропускает и начинает печать второе условие, но без итераций.
я уже мозги сломал, как так может быть. Если в консоль печатает все красиво
PEHDOM
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??

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

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

Так что переименуй в форме это всё, чтобы виделись образы - смотришь на переменную и из имени сразу понимаешь, что это такое, не вспоминая ничего.
rick
py.user.next
Спасибо, попробую)
Подскажи пожалуйста, как вызвать форму из другой формы по нажатию на клавишу?
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