Ответы пользователя по тегу PyQt
  • Управления временем в Python?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Как и сказал Sergey6661313 вам нужно использовать QTimer. Класс QTimer испускает сигнал timeout спустя заданное время.

    Вот пример использования QTimer с QProgressBar. Таймер испускает сигнал timeout каждую секунду, по сигналу вызывается метод on_timer в котором происходит инкрементирование QProgressBar, после заполнения прогресса таймер останавливается.

    from PyQt4 import QtGui
    from PyQt4 import QtCore
    
    class Widget(QtGui.QWidget):
        
        def __init__(self, parent=None):
            super(Widget, self).__init__()
            layout = QtGui.QVBoxLayout(self)
            self.pb = QtGui.QProgressBar()
            self.pb.setMaximum(100)
            self.pb.setMinimum(0)
            self.pb.setValue(0)
            layout.addWidget(self.pb)
            self.timer = QtCore.QTimer()
            self.timer.timeout.connect(self.on_timer)
            self.timer.start(1000)
    
        def on_timer(self):
            current_value = self.pb.value() + 1
            self.pb.setValue(current_value)
            if current_value == 100:
                self.timer.stop()
    
    if __name__ == '__main__':
        app = QtGui.QApplication([])
        w = Widget()
        w.show()
        app.exec()
    Ответ написан
    Комментировать
  • Проблема с классом QWidget. Как настроить правильную работу PyQ4t?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Судя по вашему скрину, ваш Widget не активный, поэтоме и не показывается подсказка. Тыкните внутри окна `Tooltip`, а потом подождите, и должна появится подсказка.
    Ответ написан
    Комментировать
  • Как передать доп. данные в контрол и потом это считать в обработчике событий?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    А почему у вас не заработало с наследованием?

    Попробуйте вот такой пример с использованием наследования и сигналов:

    from PyQt4 import QtGui, Qt
    
    
    class MyLabel(QtGui.QLabel):
        clicked = Qt.pyqtSignal(str)
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
    
        def mousePressEvent(self, *args, **kwargs):
            self.clicked.emit(self.text())
            return QtGui.QLabel.mousePressEvent(self, *args, **kwargs)
    
    
    class Main(QtGui.QWidget):
    
        def __init__(self):
            super().__init__()
            layout = QtGui.QVBoxLayout(self)
            for i in range(5):
                label = MyLabel(self, "Label " + str(i))
                label.clicked.connect(self.set_title)
                layout.addWidget(label)
            self.resize(300, 300)
    
        def set_title(self, label):
            self.setWindowTitle(label)
    
    if __name__ == '__main__':
        app = Qt.QApplication([])
        m = Main()
        m.show()
        app.exec()
    Ответ написан
    1 комментарий
  • Как сделать импорт всех классов в PyQt5?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    В PyQt5 достаточно импортировать модуль Qt, а через него получать доступ ко всему что нужно. Если сразу сделаете импорт всех классов, просто захламите вашу программу.

    Например:

    from PyQt5 import Qt
    
    
    class ExampleWidget(Qt.QWidget):
    
        def __init__(self):
            super().__init__()
            layout = Qt.QVBoxLayout(self)
            layout.addWidget(Qt.QLabel("Label"))
            layout.addWidget(Qt.QLineEdit("LineEdit"))
            layout.addWidget(Qt.QPushButton("PushButton"))
            pb = Qt.QProgressBar()
            pb.setValue(66)
            layout.addWidget(pb)
    
    
    if __name__ == '__main__':
        app = Qt.QApplication([])
        w = ExampleWidget()
        w.show()
        app.exec()
    Ответ написан
    Комментировать
  • Как правильно работать с QThread?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Можете привести весь код? Проверьте работает ли простой код с обновлением прогресса.

    from PyQt4.QtGui import QWidget, QVBoxLayout, QPushButton, QProgressBar, QApplication
    from PyQt4.QtCore import QThread, pyqtSignal
    import time
    
    
    class SomeThread(QThread):
        progressed = pyqtSignal(int)
    
        def __init__(self):
            super().__init__()
    
        def run(self):
            for i in range(1, 11):
                self.progressed.emit(i)
                time.sleep(0.5)
    
    
    class App(QWidget):
    
        def __init__(self):
            super().__init__()
            vbox = QVBoxLayout()
            self.pBar = QProgressBar()
            self.pBar.setMaximum(10)
            vbox.addWidget(self.pBar)
            self.button = QPushButton("Start")
            vbox.addWidget(self.button)
            self.thread = None
            self.setLayout(vbox)
            self.button.clicked.connect(self.on_button)
    
        def on_button(self):
            if not self.thread:
                self.thread = SomeThread()
                self.thread.progressed.connect(self.on_progress)
                self.thread.finished.connect(self.on_finished)
                self.thread.start()
    
        def on_progress(self, value):
            self.pBar.setValue(value)
    
        def on_finished(self):
            self.thread.progressed.disconnect(self.on_progress)
            self.thread.finished.disconnect(self.on_finished)
            self.thread = None
    
    if __name__ == '__main__':
        qApp = QApplication([])
        app = App()
        app.show()
        qApp.exec()
    Ответ написан
    2 комментария
  • Почему PyQt5 не считает класс виджета QObject?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    У вас в целом очень странная организация классов, отсюда и ошибки. Также у вас ошибки в исходных текстах, например lineedit и lineEdit, откуда то QTableViewItem взялся, его в библиотеке даже нет, откуда то взялся метод exec_loop.
    Когда приводите пример, будьте внимательны.
    А проблему вашу, решить проще так:

    class ORGH_widget(Qt.QWidget):
    
        def __init__(self, parent=None):
            super(ORGH_widget, self).__init__(parent)
            self.maindialog = ORGH_app(None)
            self.layout = Qt.QVBoxLayout(self)
            self.layout.addWidget(self.maindialog)
            self.maindialog.show()
    #        self.exec_loop()
    
        def keyPressEvent(self, e):
            if e.key() == Qt.Qt.Key_Escape:
                self.close()
    
    
    class ORGH_app(Qt.QMainWindow):
    
        def __init__(self, parent):
            super(ORGH_app, self).__init__()
            self.form = Ui_Form()
            self.form.setupUi(self)
    
            self._connectSlots()
    
        def _connectSlots(self):
            self.form.pushButton.clicked.connect(self._slotAddClicked)
    
        def _slotAddClicked(self):
            text = self.form.lineEdit.text()
            if len(text):
    #             tvi = Qt.QTableViewItem(self.form.tableView)
    #             tvi.setText(0, text)
                self.form.lineEdit.clear()
    
    if __name__ == "__main__":
        app = Qt.QApplication(sys.argv)
        main = ORGH_app(None)
        main.show()
        sys.exit(app.exec())
    Ответ написан
    1 комментарий
  • Как сделать адаптивную форму в QtDesigner?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Поместите на форму менеджер разметки, например QGridLayout или QVBoxLayout. Потом поместите элемент QTextField. И у вас все будет работать как надо.

    Или, поместите несколько элементов на форму, а потом нажмите кнопку сверху "Lay Out Horizontally".
    Ответ написан
    3 комментария
  • Как открыть новое окно по нажатию на кнопку в тулбаре?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Можно попробовать вот так:

    import sys
    
    from PyQt5.Qt import QVBoxLayout, QLabel, QDialog, QDialogButtonBox, Qt
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication
    
    
    class InfoDialog(QDialog):
    
        def __init__(self, info_str, parent=None):
            super(InfoDialog, self).__init__(parent)
    
            layout = QVBoxLayout(self)
            layout.addWidget(QLabel(info_str))
    
            buttons = QDialogButtonBox(QDialogButtonBox.Ok, Qt.Horizontal, self)
            buttons.accepted.connect(self.accept)
    
            layout.addWidget(buttons)
    
    
    class Example(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            exitAction = QAction(QIcon('RM.png'), 'Exit', self)
            exitAction.setShortcut('Ctrl+Q')
            exitAction.triggered.connect(qApp.quit)
    
            infoAction = QAction(QIcon(), "Info", self)
            infoAction.triggered.connect(self.onInfoAction)
    
            self.toolbar = self.addToolBar('Exit')
            self.toolbar.addAction(exitAction)
            self.toolbar.addAction(infoAction)
    
            self.setGeometry(300, 300, 300, 200)
            self.setWindowTitle('Toolbar')
            self.show()
    
        def onInfoAction(self):
            w = InfoDialog("Some information", self)
            w.exec_()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    Ответ написан
    4 комментария
  • Как исправить ошибки при запуске python скрипта file.py преобразованного в file.exe?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Добрый день.

    Попробуйте собрать при помощи py2exe вот такой пример:

    Файл main.py:

    from PyQt4.QtCore import *
    from PyQt4 import QtGui
     
    class HelloPython(QtGui.QWidget):
        def __init__(self, parent=None):
            super(HelloPython, self).__init__(parent)
            helloLabel = QtGui.QLabel("Say Hello To PyQT!")       
            helloLineEdit = QtGui.QLineEdit()
     
            mainLayout = QtGui.QGridLayout()
            mainLayout.addWidget(helloLabel, 0, 0)
            mainLayout.addWidget(helloLineEdit, 0, 1)
     
            self.setLayout(mainLayout)
            self.setWindowTitle("My Python App")
     
    if __name__ == '__main__':
        import sys
     
        app = QtGui.QApplication(sys.argv)
     
        helloPythonWidget = HelloPython()
        helloPythonWidget.show()
     
        sys.exit(app.exec_())


    Файл setup.py:
    from distutils.core import setup
    import py2exe
    
    setup(windows=['main.py'], options={"py2exe": {"bundle_files": 1, "compressed": True, "includes": ["sip"]}})


    Проверил на Windows 7-x64 и Windows Xp-x64.

    python-3.4 устанавливал с официального сайта.
    py2exe‑0.9.2.2‑cp34‑none‑win_amd64.whl и PyQt4‑4.11.4‑cp34‑none‑win_amd64.whl с сайта Python Extension.

    Выглядит так, как будто у вас пакеты для разных платформ. Например если python для x86, а py2exe для x64.
    Ответ написан
    2 комментария
  • Как сделать небольшой редактор изображений?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Вам нужно прочитать документацию по Pil(Pillow): Pillow. В ней есть все те модификации, что вы написали. Есть фильтрации, есть методы улучшения изображений, есть способы нанесения текста и прочее.

    Для реализации GUI, есть документация по PyQt5, PyQt4. Примеры по выводу изображений легко находятся в поисковике: Вывод изображений в QLabel.
    Ответ написан
  • Как получить значение списка по его номеру в qt5?

    Avernial
    @Avernial
    Разрабатываю научное ПО на языке Python.
    Текущее значение можно получить так:
    self.ui.listFirmware.currentItem().text()

    По индексу так, item(index):
    self.ui.listFirmware.item(1).text()
    Ответ написан
    1 комментарий