标签: pyqt5

为什么我需要创建`QApplication`的对象,它在PyQt GUI编程中的目的是什么?

def main():
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QWidget()
    w.show()

    app.exec()
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的带有PyQt5框架的Python GUI程序.其实我不熟悉Qt,也是GUI编程的新手.与上面的程序一样,有一个QApplication已创建的对象以及QWidget.在这种情况下,app对象不包含w对象,我看不到其中两个之间的任何连接.那么为什么有必要QApplication使用该对象创建一个对象并执行它呢?谢谢!

python qt pyqt5

7
推荐指数
1
解决办法
1642
查看次数

将 PyQt5 QPixmap 转换为 numpy ndarray

我有像素图:

pixmap = self._screen.grabWindow(0,
                                 self._x, self._y,
                                 self._width, self._height)
Run Code Online (Sandbox Code Playgroud)

我想将其转换为 OpenCV 格式。我尝试将其转换为numpy.ndarray如此处所述但出现错误sip.voidptr object has an unknown size

有没有办法获得 numpy 数组(与cv2.VideoCapture read方法返回的格式相同)?

python numpy pyqt qpixmap pyqt5

7
推荐指数
2
解决办法
4872
查看次数

PyQt4 到 PyQt5 怎么样?

我的代码是用 PyQt4 创建的,我想将它转换为 PyQt5。我尝试了一些脚本来转换代码;但是,除了名字,什么都没有改变。我需要手动更改什么才能使代码与 PyQt5 一起使用?

这是我的代码的第一部分:

import sys
from pymaxwell import *
from numpy import *
from PyQt4 import QtGui, QtCore, uic
from PyQt4.QtGui import QMainWindow, QApplication
from PyQt4.QtCore import *
from PyQt4.phonon import Phonon
from ffmpy import FFmpeg
import os
import app_window_dark
import about

uifile = 'Ui/app_window_dark.ui'
aboutfile = 'Ui/about.ui'

Ui_MainWindow, QtBaseClass = uic.loadUiType(uifile)
Ui_Dialog= uic.loadUiType(uifile)

class About(QtGui.QMainWindow, about.Ui_Dialog):
    def __init__(self, parent=None):
        super(About, self).__init__()
        QtGui.QMainWindow.__init__(self, parent)
        Ui_Dialog.__init__(self)
        self.setWindowModality(QtCore.Qt.ApplicationModal)
        point = parent.rect().bottomRight()
        global_point = parent.mapToGlobal(point)
        self.move(global_point - QPoint(395, 265)) …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt4 python-3.x pyqt5

7
推荐指数
1
解决办法
1万
查看次数

单击事件时清除 QLineEdit

我正在使用给定的代码,我希望用户在 QLineEdit 小部件中输入文本,按复制!按钮并查看输入的文本替换“N/A”标签。我的问题是:按照此过程,如何通过简单的鼠标单击清除 QLineEdit 小部件中输入的文本?

从我读到的(thisthisthis)来看,我似乎需要在扩展 QLineEdit 的新类中重新实现 focusInEvent()。我的问题是我的 GUI 代码是使用 pyuic5 从 Qt Designer 导入的,上面引用的示例似乎没有考虑到这一点。

这是我的代码:

from PyQt5.QtWidgets import *
import sys

import QLineEdit_test


class MainWindow(QMainWindow, QLineEdit_test.Ui_QLineEdit_test):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.copy_button.clicked.connect(self.copy_and_print)

    def copy_and_print(self):

        self.label.setText(self.lineEdit.text())


def main():

    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

这是我转换后的 .ui 文件:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_QLineEdit_test(object):
    def setupUi(self, QLineEdit_test):
        QLineEdit_test.setObjectName("QLineEdit_test")
        QLineEdit_test.resize(300, 200)
        QLineEdit_test.setMaximumSize(QtCore.QSize(300, 200))
        self.centralwidget = …
Run Code Online (Sandbox Code Playgroud)

python pyqt qt-designer python-3.x pyqt5

7
推荐指数
1
解决办法
2万
查看次数

PyQt5 - 如何向 QMessageBox 添加滚动条

我有一个基于用户输入生成的列表。

我正在尝试在 QMessageBox 中显示此列表。但是,我无法知道这个列表的长度。名单可能很长。

因此,我需要向 QMessageBox 添加滚动条。

有趣的是,我到处寻找,但我还没有找到任何解决方案。

下面是我希望是一个“最小的、完整的和可验证的示例”,当然没有用户输入;我刚刚创建了一个列表作为示例。

我很感激任何建议。

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class W(QWidget):

   def __init__(self):
      super().__init__()

      self.initUi()

   def initUi(self):
      self.btn = QPushButton('Show Message', self)
      self.btn.setGeometry(10, 10, 100, 100)
      self.btn.clicked.connect(self.buttonClicked)
      self.lst = list(range(2000))
      self.show()


   def buttonClicked(self):
      result = QMessageBox(self)
      result.setText('%s' % self.lst)
      result.exec_()

if __name__ == "__main__":
   app = QApplication(sys.argv)
   gui = W()
   sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

python pyqt qmessagebox pyqt5

7
推荐指数
1
解决办法
5197
查看次数

如何在没有 QProcess 的情况下在 PyQt5 应用程序中嵌入终端?

我最近一直在努力在 PyQt GUI 应用程序中嵌入一个终端。几乎尝试了互联网上的所有搜索,但似乎没有任何帮助。

我有一个 QTabWidget,我只需要一个选项卡就有一个终端。

根本不可能这样做吗?

是不是有什么样QTabWidget.Tab2.show(terminal-app)和默认的终端被显示在TAB2和像每一个功能lsifconfigcd等工作正常?

PS - 我已经尝试过这些,但没有成功。 在 PyQt5 中嵌入终端

(此处将代码从 PyQt4 转换为 PyQt5,但这不能满足我的需求)如何使用嵌入在 PyQt GUI 中的终端

TIA

python pyqt python-3.x qtabwidget pyqt5

7
推荐指数
1
解决办法
5487
查看次数

如何在没有元类冲突的情况下对PyQt子类使用泛型类型?

我曾尝试abc.ABCMeta使用sip包装器类型,并且在子类使用时效果很好abc.ABC.

class QABCMeta(wrappertype, ABCMeta):
    pass

class WidgetBase(QWidget, metaclass=QABCMeta):
    ...

class InterfaceWidget(WidgetBase, ABC):
    ...

class MainWidget(InterfaceWidget):
    ...
Run Code Online (Sandbox Code Playgroud)

但它不起作用typing.Generic.

class QGenericMeta(wrappertype, GenericMeta):
    pass

class WidgetBase(QWidget, Generic[T], metaclass=QGenericMeta):
    ...

class GenericWidget(WidgetBase[float]):
    ...
Run Code Online (Sandbox Code Playgroud)

它提出:

line 980, in __new__
    self if not origin else origin._gorg)
TypeError: can't apply this __setattr__ to sip.wrappertype object
Run Code Online (Sandbox Code Playgroud)

我希望它像往常一样使用泛型子类:

class TableBase(QTableWidget, Generic[T]):
    @abstractmethod
    def raw_item(self, row: int) -> T:
        ...
    def data(self) -> Iterator[T]:
        yield from (self.raw_item(row) for row in range(self.rowCount()))

class MainTable(TableBase[float]):
    def …
Run Code Online (Sandbox Code Playgroud)

python metaclass typing pyqt5 pyside2

7
推荐指数
1
解决办法
192
查看次数

从 PyQt GUI 连接到串口

我编写了一个程序来从串行发送和接收数据,但是我有一个问题,我想创建一个函数“connect()”或一个类,当我按下一个按钮时,该函数被执行,但是如果我创建“MainWindow”类中的这个函数,“TestThread”类中的变量“ser”未初始化,你能帮帮我吗?

import sys
import serial


from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.uic import loadUi


ser = serial.Serial('/dev/tty.usbmodem14201', 9600, timeout=1)

class TestThread(QThread):
    serialUpdate = pyqtSignal(str)
    def run(self):
        while ser.is_open:
            QThread.sleep(1)
            value = ser.readline().decode('ascii')
            self.serialUpdate.emit(value)
            ser.flush()

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi('/Users/bogdanvesa/P2A_GUI/mainwindow.ui', self)
        self.thread = TestThread(self)
        self.thread.serialUpdate.connect(self.handleSerialUpdate)

        self.connect_btn.clicked.connect(self.connectSer)
        self.lcd_EBtn.clicked.connect(self.startThread)

    def startThread(self):
        self.thread.start()

    def handleSerialUpdate(self, value):
        print(value)
        self.lcd_lineEdit.setText(value)


def main():

    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

python pyserial python-3.x pyqt5

7
推荐指数
2
解决办法
1万
查看次数

集成 Qt Designer 和 PyCharm

要让 PyQt5 和 Qt Designer 与 PyCharm 配合得很好,有很多小挑战,但是在完成所有小步骤之后,我不禁怀疑我是否错过了显而易见的事情。

集成 PyCharm 和 Qt Designer 的最直接方法是什么?

到目前为止我做了什么:

  • 安装 Qt 设计器
  • 将其设置为外部工具
    • 打开 Settings > Tools > External tools
    • 添加新工具
    • 将参数设置为$FilePath$和工作目录为$Projectpath$
  • 右键点击 .ui项目资源管理器中的文件并从那里启动 Qt Designer
  • 从设置中设置一个文件观察器,观察 Qt UI 设计器表单的变化,并pyuic5使用正确的参数运行以生成.py我的匹配项.ui

我正在寻找的答案:

  • 如何收紧 Qt Designer 和 PyCharm 之间的循环?具体来说,是否可以从 PyCharm 或什至在 PyCharm 中的选项卡中通过简单的双击打开 Qt 设计器?
  • 是否有更好的整体工作流程可以实现相同的目标,而我在这里遗漏了?

python qt-designer pycharm pyqt5

7
推荐指数
2
解决办法
1万
查看次数

我可以将 Neumorphism 效果应用于 QWidget 吗?

虽然 Qt 提供了 QGraphicsDropShadowEffect,但没有可用的“ Neumorphism ”效果:

投影和新同态的比较

在 css 中有一个box-shadow属性(上图中就是这样做的),它可以有多种颜色,但 Qt 缺乏对该属性的支持,并且一次应用多个图形效果是不可能的。

这能做到吗?

pyqt pyqt4 pyqt5 qgraphicseffect

7
推荐指数
1
解决办法
1482
查看次数