PyQt5

Maslorik

Новичок
Пользователь
Сен 18, 2021
3
0
1
Изучение python 3.7 и PyQt5 решил начать с написания такой программы. Что-то типа видосов, которые обещают улучшить скорость чтения.
Пользователь вводит начальную скорость чтения, некое ускорение и текст, который должен после нажатия кнопки пословесно выводиться в новом окне.
У меня есть консольная версия этого приложения (первый код), не могу понять, как соединить его с интерфейсом (что делать во втором коде)
Python:
import time


print('Введите текст')
text = input().split()

print('Введите начальную скорость')
y = int(input())

print('Введите ускорение')
d = int(input())

count=0
   
for word in text:
    i=(60/y)
    print(word, sep='\n')
    time.sleep(i)
    print(i)
    count+=1
   

    if count%5==0:
        y = y+d
        print(count)

    else:
        continue
.


Python:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow

from speed import Ui_Dialog
from win2 import Ui_Dialogu

app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()

def start():

    text = ui.plainTextEdit.toPlainText()

    Dialogu = QtWidgets.QDialog()
    uic = Ui_Dialogu()
    uic.setupUi(Dialogu)
    uic.label.setText(text)

    Dialogu.exec_()



ui.pushButton.clicked.connect(start)

sys.exit(app.exec_())
Python:
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(510, 258)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
        Dialog.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setKerning(True)
        Dialog.setFont(font)
        Dialog.setMouseTracking(False)
        Dialog.setFocusPolicy(QtCore.Qt.StrongFocus)
        Dialog.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
        Dialog.setStyleSheet("")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(50, 150, 141, 61))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setPlaceholderText('Введите скорость')
        self.lineEdit.setGeometry(QtCore.QRect(10, 30, 221, 31))
        self.lineEdit.setStyleSheet("")
        self.lineEdit.setText("")
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setPlaceholderText('Введите ускорение')
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 70, 221, 31))
        self.lineEdit_2.setText("")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(Dialog)
        self.plainTextEdit.setPlaceholderText('Введите текст')
        self.plainTextEdit.setGeometry(QtCore.QRect(253, 10, 251, 241))
        self.plainTextEdit.setFocusPolicy(QtCore.Qt.StrongFocus)
        self.plainTextEdit.setContextMenuPolicy(QtCore.Qt.NoContextMenu)

        self.plainTextEdit.setObjectName("plainTextEdit")

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "Стартуем"))
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
У меня есть консольная версия этого приложения (первый код), не могу понять, как соединить его с интерфейсом (что делать во втором коде)
Вот так можно например:
Python:
import sys
import time
from PyQt5 import QtCore, QtWidgets
from speed import Ui_Dialog  # импорт дизайна основного окна


# дизайн для модального окна
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(563, 420)
        self.plainTextEdit = QtWidgets.QPlainTextEdit(Form)
        self.plainTextEdit.setEnabled(True)
        self.plainTextEdit.setGeometry(QtCore.QRect(0, 0, 563, 420))
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.plainTextEdit.setStyleSheet("font-size:20px;")
        self.plainTextEdit.setReadOnly(True)
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))


# класс для отдельного потока
class MyThread(QtCore.QThread):
    mysignal = QtCore.pyqtSignal(str)

    def __init__(self, input_text=[], speed=1, acc=1, parent=None):
        super().__init__(parent)
        self.text = input_text
        self.speed = speed
        self.acc = acc

    # код внутри метода будет выполняться в отдельном потоке
    def run(self):
        wait = 60 / self.speed
        count = 0
        while len(self.text) > 0:
            self.mysignal.emit(self.text.pop(0))
            time.sleep(wait)
            count += 1
            if count % 5 == 0:
                self.speed += self.acc
                wait = 60 / self.speed


class MainWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.handler)

    def handler(self):
        self.dialog = QtWidgets.QDialog(self)
        self.uic = Ui_Form()
        self.uic.setupUi(self.dialog)
        self.text = self.ui.plainTextEdit.toPlainText().split()
        self.speed = int(self.ui.lineEdit.text())
        self.acc = int(self.ui.lineEdit_2.text())
        # создаем поток для вывода текста
        # (передаем в него текст, скорость, ускорение)
        self.mythread = MyThread(self.text, self.speed, self.acc)
        # с помощью сигнала привязываем к нему метод add_item
        self.mythread.mysignal.connect(self.add_item)
        # запускаем поток
        self.start_handler()
        # открываем модальное окно для вывода в него текста
        self.dialog.exec_()

    def start_handler(self):
        self.mythread.start()

    def add_item(self, value):
        self.uic.plainTextEdit.appendPlainText(value)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    myapp = MainWin()
    myapp.show()
    sys.exit(app.exec_())
 
Последнее редактирование:

Maslorik

Новичок
Пользователь
Сен 18, 2021
3
0
1
О
Большое спасибо)
Но я сейчас подумал
Не получится ли сделать такое же с Label?
Чтобы выглядело как-нибудь вот так и слова менялись, а не шли в столбик

Я перепробовал всё, что мог (всё, что знал)
Но ничего не получилось
 

Вложения

  • Снимок1.JPG
    Снимок1.JPG
    22,5 КБ · Просмотры: 1
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Не получится ли сделать такое же с Label?
Нужно в модальном окне plainTextEdit заменить на label:
Python:
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(563, 420)
        self.label = QtWidgets.QLabel(Form)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setGeometry(QtCore.QRect(0, 0, 563, 420))
        self.label.setStyleSheet("QLabel {font-size:50px;}")
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
и в методе add_item менять текст в label:
Python:
def add_item(self, value):
    self.uic.label.setText(value)
 

Maslorik

Новичок
Пользователь
Сен 18, 2021
3
0
1
Всё работает
Огромное спасибо))
 

Форум IT Специалистов