标签: pyqt

Qt 的米勒专栏?

有没有一种简单的方法可以在 Qt4 中拥有类似 iTunes 的界面(使用Miller Columns),还是我必须自己创建一个 MillerColumnWidget ?

python user-interface qt4 pyqt

0
推荐指数
1
解决办法
258
查看次数

Pyside QgraphicsScene无法捕获鼠标事件

我找不到将鼠标事件附加到场景的方法。如果没有 View,所有事件都会被捕获,但是当注释掉时,只有 mousePressEvent 起作用。请帮忙。

from PySide import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.Scene()
        self.View()

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            print "Pressed!!!"

    def mouseMoveEvent(self, event):
        print "moving....."

    def mouseReleaseEvent(self, event):
        print "-------released"

    def Scene(self):
        self.s = QtGui.QGraphicsScene(self)

    def View(self):
        self.v = QtGui.QGraphicsView(self.s)
        self.setCentralWidget(self.v)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(300, 200)
    window.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

qt pyqt pyside qt-events qt-signals

0
推荐指数
1
解决办法
2102
查看次数

将信号传递给 QMessageBox 时出现 PyQT 线程错误

我尝试使用信号从线程接收字符串到我的主 GUI。一切正常,直到我想在 QMessageBox 中使用该字符串。打印出来没有问题,但是启动 QMessageBox 给了我几个错误(有些是关于 QPixmap 的,我什至不在 GUI 中使用。

这是我的代码的一个简短的工作示例:

import sys
import urllib2
import time
from PyQt4 import QtCore, QtGui


class DownloadThread(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)


    def run(self):
        time.sleep(3)
        self.emit(QtCore.SIGNAL("threadDone(QString)"), 'test')


class MainWindow(QtGui.QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.list_widget = QtGui.QListWidget()
        self.button = QtGui.QPushButton("Start")
        self.button.clicked.connect(self.start_download)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.button)
        layout.addWidget(self.list_widget)
        self.setLayout(layout)

        self.downloader = DownloadThread()
        self.connect(self.downloader, QtCore.SIGNAL("threadDone(QString)"), self.threadDone, QtCore.Qt.DirectConnection)

    def start_download(self):
        self.downloader.start()

    def threadDone(self, info_message):
        print info_message
        QtGui.QMessageBox.information(self,
                    u"Information",
                    info_message
                    )
        #self.show_info_message(info_message)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = …
Run Code Online (Sandbox Code Playgroud)

python multithreading pyqt qmessagebox

0
推荐指数
1
解决办法
2964
查看次数

如何使 QTreeView 始终首先对特定类别的项目进行排序?

我想在QTreeView中显示“文件夹”和“文件” 。文件夹旨在能够包含文件,并且由于这种关系,我希望文件夹项目显示在树视图中的文件项目上方。视图应该是可排序的。如何确保在树视图中文件夹项目始终显示在文件项目之上?

以下代码提供了包含文件夹和文件项的树视图示例:

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


def _create_item(text, is_folder):
    item = QStandardItem(text)
    item.setData(is_folder, Qt.UserRole)
    return item


def _folder_row(name, date):
    return [_create_item(text, True) for text in (name, date)]


def _file_row(name, date):
    return [_create_item(text, False) for text in (name, date)]


class _Window(QMainWindow):
    def __init__(self):
        super().__init__()

        widget = QWidget()
        self.__view = QTreeView()
        layout = QVBoxLayout(widget)
        layout.addWidget(self.__view)
        self.setCentralWidget(widget)

        model = QStandardItemModel()
        model.appendRow(_file_row('File #1', '01.09.2014'))
        model.appendRow(_folder_row('Folder #1', '01.09.2014'))
        model.appendRow(_folder_row('Folder #2', '02.09.2014'))
        model.appendRow(_file_row('File #2', '03.09.2014')) …
Run Code Online (Sandbox Code Playgroud)

qt pyqt qt5 pyqt5

0
推荐指数
1
解决办法
2565
查看次数

PyQt/Pyside - 动态创建和连接 - 捕获 lambda 中的函数和参数

我正在尝试重新创建 Windows 记事本。

\n\n

我目前正在搞乱QMenuBar

\n\n

我制作了一本字典,其中包含以下模式的所有菜单和操作:

\n\n
menus = {'File':[['New', 'Ctrl+n'],\n                 ['Open', 'Ctrl+o'],\n                 ['Save', 'Ctrl+s'],\n                 ['Save as...', None],\n                 'Separator', \n                 # and so on\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我迭代该字典,并成功创建菜单和操作并将它们存储在第二个字典中。

\n\n

现在我正在尝试连接每个action[new, open, save, \xe2\x80\xa6] to a instance method of the same name.

\n\n

我这样做是这样的:

\n\n
for action in menus[m]:\n    action = menu.addAction(action[0])\n\n    if action[1]:\n        action.setShortcut(QKeySequence(action[1]))\n\n    if isinstance(action, QAction):\n        fname = action[0].lower() \n        # and some other string manipulations\n        func = getattr(self,fname)\n        action.triggered.connect(lambda arg=action: func(arg))\n
Run Code Online (Sandbox Code Playgroud)\n\n

它连接成功,但如果我尝试使用任何操作,它不会执行任何操作。

\n\n

我以前曾使用 lambda 函数连接操作,但这是我第一次使用 …

python lambda pyqt pyside getattr

0
推荐指数
1
解决办法
1538
查看次数

QTableView由模型驱动时如何刷新

下面的代码创建QTableViewself.myModel( QAbstractTableModel) 驱动。“显示全部”self.checkBox链接到self.myModel.cbChanged()方法。

在此输入图像描述

问题:如何修改此代码,以便在选中复选框后立即刷新“QTableView”?

目标:当选中该复选框时,我们希望显示奇数编号的项目。以及要隐藏的偶数项。当复选框关闭(未选中)时,我们希望显示偶数编号的项目。所有奇数编号的项目都被隐藏。

import sys, os
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        QtCore.QAbstractTableModel.__init__(self)      

        self.items=['One','Two','Three','Four','Five','Six','Seven']
        self.cb_status=True

    def rowCount(self, parent=QtCore.QModelIndex()):   
        return len(self.items)
    def columnCount(self, index=QtCore.QModelIndex()):
        return 1

    def data(self, index, role):
        if not index.isValid() or not (0<=index.row()<len(self.items)):
            return QtCore.QVariant()

        item=str(self.items[index.row()])

        if role==QtCore.Qt.DisplayRole and self.cb_status:
            return item
        else:
            return QtCore.QVariant()

    def cbChanged(self, arg=None):
        self.cb_status=arg  

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        mainLayout=QtGui.QHBoxLayout()
        self.setLayout(mainLayout)   

        self.viewA=QtGui.QTableView()
        self.viewA.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) 

        self.myModel=TableModel()
        self.viewA.setModel(self.myModel)

        self.checkBox=QtGui.QCheckBox("Show All") …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt qtableview pyside

0
推荐指数
1
解决办法
7437
查看次数

如何在Qt或PyQt中使用QDataWidgetMapper?

我可以找到一些如何使用标准模型和标准视图的示例。

http://doc.qt.io/qt-5/modelview.html

http://doc.qt.io/qt-5/qtwidgets-itemviews-simplewidgetmapper-example.html

但我就是找不到一个如何使用QAbstractModelmake my ownmodel并自行使用它的示例view/widget

更新模型后,支架视图将更新,但我自己的视图不会更新。运行结果

完整代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from  PyQt5.QtWidgets import (QWidget, QLabel, QDataWidgetMapper,
                              QLineEdit, QApplication, QGridLayout)
from PyQt5.QtCore import QAbstractListModel, Qt
from PyQt5.QtWidgets import QListView


class Window(QWidget):
    def __init__(self, model, parent=None):
        super(Window, self).__init__(parent)

        self.model = model

        # Set up the widgets.
        nameLabel = QLabel("Na&me:")
        nameEdit = QLineEdit()

        # Set up the mapper.
        self.mapper = QDataWidgetMapper(self)
        self.mapper.setModel(self.model)
        self.mapper.addMapping(nameEdit, 0)

        layout = QGridLayout()
        layout.addWidget(nameLabel, 0, 0, 1, 1) …
Run Code Online (Sandbox Code Playgroud)

python model-view-controller user-interface qt pyqt

0
推荐指数
1
解决办法
3718
查看次数

Wacom 数位板的 Python 示例

Wacom 没有官方的 Python SDK。尽管如此,PyQt 有一个 QTabletEvent 来处理这些平板电脑。

唉,我没有发现这方面的工作 python 示例。

可以在此处查看 C++ 示例。

任何人都可以请我参考一个python示例吗?

python wacom pyqt qevent

0
推荐指数
1
解决办法
2250
查看次数

调试模式下的 PyCharm PyQt4 / PyQt5 冲突

我正在尝试在 pycharm 中使用 PyQt4。我的代码在运行模式下完美运行,但在调试模式下,当我尝试导入 PyQt4 时出现以下错误:

“运行时错误:PyQt4.QtCore 和 PyQt5.QtCore 模块都包装了 QObject 类”

即使使用非常准系统的代码也会发生这种情况:

from PyQt4 import QtGui, QtCore
print('cheese')
Run Code Online (Sandbox Code Playgroud)

(因此,这与以前的PyQt4 Pycharm 问题 w. Matplotlib 不同)

很明显,PyCharm 调试器正在使用 PyQt5(这可以通过调用 sys.modules['PyQt5'] 看到)。我怎样才能“取消导入”PyQt5,或者至少防止碰撞?

另外:我尝试以不同的方式导入以包含显式依赖项,但这也会产生错误:

import PyQt4 as pp
pp.QtGui
Run Code Online (Sandbox Code Playgroud)

AttributeError: 模块“PyQt4”没有属性“QtGui”

谢谢!

python debugging pyqt pyqt4 pycharm

0
推荐指数
1
解决办法
1287
查看次数

PyQt5:调用长时间运行的函数时 QMainWindow 冻结

创建一个 QMainWindow >> 按下开始按钮 >> 将长时间运行的函数与 QLabel 作为 arg >> 在运行长函数时更新标签。

我想更新 GUI 中长时间运行的函数的状态。但是一旦长时间运行的功能启动,整个窗口就会冻结

import sys
import time
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
    QApplication,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget,
)

def runLongTask(label):
    label.setText('<1> sleeping for 10s ...')
    time.sleep(10)
    label.setText('<2> sleeping for 10s ...')
    time.sleep(10)
    label.setText('End')

class Window(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi()

    def setupUi(self):
        self.setWindowTitle("GUI freeze FIX")
        self.resize(350, 250)
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.label = QLabel()
        self.label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.label.setText('No Update')
        countBtn = QPushButton("Start")
        countBtn.clicked.connect(lambda: runLongTask(self.label))
        layout …
Run Code Online (Sandbox Code Playgroud)

python pyqt pyqt5

0
推荐指数
1
解决办法
453
查看次数