小编ekh*_*oro的帖子

QTableView中的搜索/查找功能

我有一个QWidget,里面有一个QTableView.我需要在表的第一列有一个查找功能,所以当我点击Ctrl + F时,会弹出一个查找对话框.

class Widget(QWidget):
    def __init__(self,md,parent=None):
        QWidget.__init__(self,parent)
        layout=QVBoxLayout(self)

        # initially construct the visible table
        tv = QTableView()
        # uncomment this if the last column shall cover the rest
        tv.horizontalHeader().setStretchLastSection(True)
        tv.show()

        # set black grid lines
        self.setStyleSheet("gridline-color: rgb(39, 42, 49)")

        # construct the Qt model belonging to the visible table
        model = NvmQtModel(md)
        tv.setModel(model)
        tv.resizeRowsToContents()
        tv.resizeColumnsToContents()

        # set the shortcut ctrl+F for find in menu
        shortcut = QShortcut(QKeySequence('Ctrl+f'), self)
        shortcut.activated.connect(self.handleFind)

        # delegate for decimal
        delegate = NvmDelegate()
        tv.setItemDelegate(delegate)
        self.setGeometry(200,200,600,600) # …
Run Code Online (Sandbox Code Playgroud)

python search qt pyqt qtableview

5
推荐指数
1
解决办法
2040
查看次数

PyQt:在运行时向滚动区域添加小部件

我试图在运行时通过按下按钮来添加新的小部件(在下面的示例中我使用标签)。这里是例子:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Widget(QWidget):

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

        btn_new = QPushButton("Append new label")
        self.connect(btn_new, SIGNAL('clicked()'), self.add_new_label)

        #Container Widget       
        self.widget = QWidget()
        #Layout of Container Widget
        layout = QVBoxLayout(self)
        for _ in range(20):
            label = QLabel("test")
            layout.addWidget(label)
        self.widget.setLayout(layout)

        #Scroll Area Properties
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        scroll.setWidgetResizable(False)
        scroll.setWidget(self.widget)

        #Scroll Area Layer add
        vLayout = QVBoxLayout(self)
        vLayout.addWidget(btn_new)
        vLayout.addWidget(scroll)
        self.setLayout(vLayout)

    def add_new_label(self):
        label = QLabel("new")
        self.widget.layout().addWidget(label)


if __name__ == '__main__':
    app = …
Run Code Online (Sandbox Code Playgroud)

qt resize pyqt qlabel qscrollarea

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

从.qrc文件(使用pyside-rcc)编译的.py文件不起作用

我正在研究python项目,我的.py文件存在问题,该文件符合.qrc文件.首先,让我简要介绍一下我的项目.

我在QtDesigner中创建了我的项目GUI,并且还使用了GUI中的图像.然后,我使用pyside-uic从.ui文件生成.py,并使用pyside-rcc从.qrc文件生成.py文件.问题是当我使用.py文件(图像文件)时,图像不会显示在我的GUI中.

有谁知道如何解决这个问题?

谢谢你的所有答案.:)

PS.我使用PySide作为我的GUI语言.

python image qt-designer pyside rcc

5
推荐指数
1
解决办法
5825
查看次数

使用QObject从Python线程发出信号

我想知道与QThread相比,从QObject中的常规python线程发出信号会产生什么后果.

请参阅以下课程:

class MyObject(QtCore.QObject):

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

    sig = pyqtSignal()

    def start(self):
        self._thread = Thread(target=self.run)
        self._thread.start()

    def run(self):
        self.sig.emit()
        # Do something
Run Code Online (Sandbox Code Playgroud)

现在,假设在GUI线程中,我有:

def __init__(self):
    self.obj = MyObject()
    self.obj.sig.connect(self.slot)
    self.obj.start()

def slot(self):
    # Do something
Run Code Online (Sandbox Code Playgroud)

slot当所述信号被发射确实执行.但是,我想知道该slot方法将在哪个线程中执行?如果我使用QThread而不是python线程,它会有什么不同MyObject吗?

我正在使用PyQt5和Python 3.

python multithreading pyqt signals-slots pyqt5

5
推荐指数
1
解决办法
2460
查看次数

如何在Linux上编译QScintilla和Eric6?

首先,我按照以下步骤安装QScintilla:

1:

cd Qt4Qt5
qmake qscintilla.pro
sudo make
make install
Run Code Online (Sandbox Code Playgroud)

2:

cd ../designer-Qt4Qt5
qmake designer.pro
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)

3:

cd ../Python
python3 configure.py --pyqt=PyQt5
sudo make
Run Code Online (Sandbox Code Playgroud)

在这里我遇到了问题:

QAbstractScrollArea: No such file or directory 
Run Code Online (Sandbox Code Playgroud)

和问题:

qprinter.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但我终于通过手动添加所需文件解决了这些问题.

继续:

sudo make install
Run Code Online (Sandbox Code Playgroud)

4:

然后我输入以下命令安装eric6:

sudo python3 install.py
Run Code Online (Sandbox Code Playgroud)

但我得到了:

检查依赖项

Python版本:3.4.0

找到PyQt5

对不起,请安装QScintilla2及其PyQt5/PyQt4包装器.

错误:/usr/lib/python3/dist-packages/PyQt5/Qsci.so:未定义符号:_ZTI13QsciScintilla

linux compilation pyqt qscintilla pyqt5

5
推荐指数
1
解决办法
3134
查看次数

在Qt5中无法从QWheelEvent获取pixelDelta

我从Qt4升级到Qt5(PyQt,具体而言)和QWheelEvent为我打破 - 它返回空pixelDelta(),但阶段是2(默认).我在Win 7上,所以关于阶段的警告不适用于我.当我运行此代码时:

from PyQt5 import QtWidgets


class Q(QtWidgets.QLabel):

    def wheelEvent(self, event):
        print(event.pixelDelta())

app = QtWidgets.QApplication([])
w = Q()
w.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

滚动打印'没有坐标的PyQt5.QtCore.QPoint()'.我能做什么?

python events mousewheel qt5 pyqt5

5
推荐指数
1
解决办法
1116
查看次数

pyQt5更改MainWindow标志

我使用python 3.4,pyQt5和Qt设计器(Winpython发行版).我喜欢由设计师制作guis并使用setupUi在python中导入它们的想法.我可以显示MainWindows和QDialogs.但是,现在我想设置我的MainWindow,总是在顶部,只有关闭按钮.我知道这可以通过设置Windows标志来完成.我尝试做如下:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

MainWindow显示(没有错误)但不应用Flags.我想这是因为我要求在已经创建后更改Windows属性.现在,问题是:我怎么能直接修改Ui_MainWindow呢?可以在Qt设计器中更改标志吗?谢谢

python flags qt-designer qmainwindow pyqt5

5
推荐指数
1
解决办法
7379
查看次数

VirtualEnv未正确设置路径,无法使用已安装的模块

简短版本:我如何让PyQt4的configure.py使用Virtual Env中安装的SIP版本?

长版本:我知道这个问题的变化在这里被问过一百万次,但我似乎无法找到答案.我正在尝试在虚拟环境(VE)中安装SIP和PyQt4.我无法将其安装到主系统,因为它是一台工作计算机.我们有一个旧版本的PyQt所以我不能只是从网站包复制.

我在我的VE中安装了SIP(configure.py --incdir,make,make install)但是当我在PyQt4上运行configure时,我得到错误:错误:此版本的PyQt需要SIP v4.19.0或更高版本.我安装了4.19.2版.当运行sipconfig时,它告诉我它仍在使用系统版本,即使激活了VE.如何告诉configure.py PyQt使用VE中安装的软件包?

谢谢大家!

编辑:从它的外观来看,似乎我的VE没有从正确的位置拉蟒蛇库,即使VE被激活.我添加了一行来激活将site-packages和bin dirs的路径和site-packages附加到pythonpath而没有成功.它仍然没有找到正确的库.

python virtualenv pyqt4 python-sip

5
推荐指数
1
解决办法
456
查看次数

如何动态创建pyqtSignals

是否有可能在需要时在运行时创建信号?

我在一个函数中做这样的事情:

class WSBaseConnector(QObject)

    def __init__(self) -> None:
        super(QObject, self).__init__()    
        self._orderBookListeners: Dict[str, pyqtSignal[OrderBookData]] = {}

    def registerOrderBookListener(self, market: str, listener: Callable[[OrderBookData], None], loop: AbstractEventLoop) -> None:
            try:
                signal = self._orderBookListeners[market]
            except KeyError:
                signal = pyqtSignal(OrderBookData)
                signal.connect(listener)
                self._orderBookListeners[market] = signal
            else:
                signal.connect(listener)
Run Code Online (Sandbox Code Playgroud)

如您所见,我有一个存储 str、pyqtSignal 对的字典。当我尝试将信号连接到侦听器时,出现错误:

'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
Run Code Online (Sandbox Code Playgroud)

在没有类变量的情况下,是否无法在运行时创建 pyqtSignals?

干杯。

runtime pyqt signals-slots python-3.x pyqt5

5
推荐指数
1
解决办法
991
查看次数

使用 pathlib 仅获取具有 glob 模式的目录

我想用来在当前工作目录中pathlib.glob()查找具有特定名称模式 ( ) 的目录。*data我不想明确检查 via.isdir()或其他东西。

输入数据

这是相关列表,其中三个文件夹作为预期结果,一个文件具有相同的模式,但它应该是结果的一部分。

ls -ld *data
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-02-11_68923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-04-03_38923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2022-01-03_38923_data/
-rw-r--r-- 1 user user    0  9. Sep 10:24 2011-12-43_3423_data
Run Code Online (Sandbox Code Playgroud)

预期结果

[
    '2021-02-11_68923_data/', 
    '2021-04-03_38923_data/',
    '2022-01-03_38923_data/'
]
Run Code Online (Sandbox Code Playgroud)

最小工作示例

from pathlib import Path
cwd = Path.cwd()

result = cwd.glob('*_data/')
result = list(result)
Run Code Online (Sandbox Code Playgroud)

这给了我 3 个文件夹文件。

还尝试了变体cwd.glob('**/*_data/')

python directory glob python-3.x pathlib

5
推荐指数
1
解决办法
4264
查看次数