小编ekh*_*oro的帖子

为什么 input() 会导致“QCoreApplication::exec: 事件循环已在运行”?

我遇到了这个 QCoreApplication 问题,其中在 QObject 在 QThread 内完成执行后调用 input() 会导致无限循环打印到控制台“QCoreApplication::exec: 事件循环已在运行”。

在代码中,我创建了一个通用worker作为QObject,将其移动到QThread中(使用QThread的认可方式,而不是子类化它),然后在通用worker内执行另一个QObject(主类)函数。只要我在执行 Master 后不调用 input() ,一切就可以正常工作。请注意,如果我直接在工作线程中执行函数(而不是主实例的函数),也会出现问题。

这是重现该问题的示例代码:

import sys
from PyQt4.QtCore import QCoreApplication, QObject, QThread, pyqtSignal, pyqtSlot


class Worker(QObject):
    """
    Generic worker.
    """
    start = pyqtSignal(str)
    finished = pyqtSignal()

    def __init__(self, function):
        QObject.__init__(self)
        self._function = function
        self.start.connect(self.run)

    def run(self):
        self._function()
        self.finished.emit()


class Master(QObject):
    """
    An object that will use the worker class.
    """
    finished = pyqtSignal()

    def __init__(self):
        QObject.__init__(self)

    @pyqtSlot()
    def do(self):
        print("Do what?")
        self.finished.emit()


def done():
    # FIXME This will …
Run Code Online (Sandbox Code Playgroud)

python multithreading input pyqt4 qcoreapplication

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

在 tkinter 标签 Python 中显示平方根符号

如何在 Tkinter 中显示平方根符号,并且数字实际上看起来像在根中?

python unicode symbols tkinter

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

通过导入PyQt5 Ui向按钮添加功能

我有一个名为guiNext.py和next.py的PyQt5 Ui,正在刷新用户界面。如何向UI按钮添加功能?这就是我所拥有的,当我运行next.py并单击HELLO按钮时,什么也没有发生。

guiNext.py:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'guiNext_001.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_nextGui(object):
    def setupUi(self, nextGui):
        nextGui.setObjectName("nextGui")
        nextGui.resize(201, 111)
        nextGui.setMinimumSize(QtCore.QSize(201, 111))
        nextGui.setMaximumSize(QtCore.QSize(201, 111))
        self.centralwidget = QtWidgets.QWidget(nextGui)
        self.centralwidget.setObjectName("centralwidget")
        self.helloBtn = QtWidgets.QPushButton(self.centralwidget)
        self.helloBtn.setGeometry(QtCore.QRect(10, 10, 181, 91))
        self.helloBtn.setObjectName("helloBtn")
        nextGui.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, nextGui):
        _translate = QtCore.QCoreApplication.translate
        nextGui.setWindowTitle(_translate("nextGui", "MainWindow"))
        self.helloBtn.setText(_translate("nextGui", …
Run Code Online (Sandbox Code Playgroud)

python pyqt qt-designer pyqt5 pyuic

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

PyQt:如何展开 QTreeWidget 中的所有子级

没有真正的问题,我只是有一个外观问题。好吧,首先我使用 Qt Designer 创建一个表单。在此表格上我放置了一个QTreeWidget. 我们仍然在 Qt Designer 中。在 中QTreeWidget,我创建了一些条目(父母),然后我还添加了一些子条目。完成后,我保存 ui 文件,然后加载该文件 -loadUi()动态使用。在本例中我使用 PyQt4。到目前为止没有问题。

当我加载放置的表单时,QTreeWidget 我希望程序展开所有子条目。默认情况下,当我运行该程序时,我只看到父条目。当我想查看子条目时,我必须单击父条目,但我不希望这样做。

有办法解决这个问题吗?

python qt4 qtreewidget pyqt4

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

PyQt5:为 QStandardItem 设置数据

如果我构造一个QStandardItem这样的:

item = QtGui.QStandardItem('Item Name')
Run Code Online (Sandbox Code Playgroud)

当这个项目被添加到一个QStandardItemModel模型并在一个模型中查看时,QTreeView我得到一个单元格,上面写着Item Name. 但是,当我构建一个像:

item = QtGui.QStandardItem()
item.setData(123)
Run Code Online (Sandbox Code Playgroud)

我得到一个空单元格,但我仍然可以通过调用来调用数据:

print(item.data())
Run Code Online (Sandbox Code Playgroud)

我会得到号码123。如何让数字实际显示在单元格中?

python qt pyqt qtreeview qstandarditem

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

PyQt:如何从选择查询中获取行值

我正在 PyQt 中创建一个应用程序,我想在其中创建一个列表,列表项是 SQL 查询的结果。我正在尝试通过以下代码执行此操作:

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

def main():  
    app  = QApplication(sys.argv)
    win=QWidget()
    layout=QHBoxLayout()
    db = QSqlDatabase.addDatabase("QODBC")
    win.setWindowTitle("Connect to MSSQL Database Example")   
    db.setHostName('LAPTOP-B79DRPA3')
    db.setDatabaseName('local')
    db.open()
    if (db.open()==False):     
      QMessageBox.critical(None, "Database Error",
                db.lastError().text())   

    query = QSqlQuery () 
    query.exec_  ("select lydelse, bransch from [Sarah].[dbo].fraga")

    listWidget = QListWidget()
    index=0
    while (query.next()):
        listWidget.addItem(str(query.value(index)))
        index = index+1
    listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
    layout.addWidget(listWidget)
    win.setLayout(layout)
    win.show()
    return app.exec_()

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

但是这里发生的事情是输出是一个包含来自不同列的项目的列表。我想要的是我应该能够选择一列并将所有行项目作为 list-items 添加到列表中:

index=0
while (query.next()): …
Run Code Online (Sandbox Code Playgroud)

python pyqt qsqlquery

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

如何在python中读取bmp文件头?

我需要用python读取bmp文件的标题。我这样试过,但它显然只返回一堆不可理解的字节:

f = open(input_filename,"rb")
data = bytearray(f.read())
f.close()
print(data[:14])
Run Code Online (Sandbox Code Playgroud)

我的想法是找到一个模块或一些快速的东西,以便在打开它时记录图像信息。我知道这个功能的MATLAB中,做正是我想要的:imfinfo()。但我在 python 中找不到对应物。

需要明确的是,这就是我使用 matlab 得到的结果:

       FileModDate: '20-Oct-2017 09:42:24'
          FileSize: 1311798
            Format: 'bmp'
     FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
             Width: 1280
            Height: 1024
          BitDepth: 8
         ColorType: 'indexed'
   FormatSignature: 'BM'
NumColormapEntries: 256
          Colormap: [256x3 double]
           RedMask: []
         GreenMask: []
          BlueMask: []
   ImageDataOffset: 1078
  BitmapHeaderSize: 40
         NumPlanes: 1
   CompressionType: 'none'
        BitmapSize: 1310720
    HorzResolution: 0
    VertResolution: 0
     NumColorsUsed: 256
NumImportantColors: 0
Run Code Online (Sandbox Code Playgroud)

python image image-processing bmp file-header

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

Pyside:检测 QWidget 上的单击和双击

我正在 Maya 中构建一个 UI,当单击按钮时将生成一堆水平布局,其中包含QScrollArea. 我想弄清楚如何让每一行识别单击/双击。当单击特定行时,我希望它返回被单击的小部件,以便我可以用它做一些事情。我想我可能必须将容器小部件附加到行布局才能识别鼠标点击?

我已经弄清楚了一般如何识别单击和双击并让它打印一些东西 - 但我很难弄清楚如何将它链接到一个小部件。

python user-interface mouseevent pyside

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

ValueError:未转换的数据仍然存在:00:00:00

我在转换日期时间时遇到问题。

这是我的代码:

@api.multi
def action_confirm(self):
if picking.state not in ['cancel', 'draft']:
    for schedule_delivery in sorted_key:

    print "line 105: ", schedule_delivery
                dup_picking = picking.copy()
                        if shift == "afternoon":
                            date_object = datetime.strptime(schedule_delivery, '%Y-%m-%d')
                            print "Line 146", date_object
                            # raise EnvironmentError
                            tanggal = datetime.strftime(date_object, "%Y-%m-%d") + ' 06:00:00'
                            print "Line 145", tanggal
                            dup_picking.min_date = tanggal
                        else:
                            dup_picking.min_date = schedule_delivery
Run Code Online (Sandbox Code Playgroud)

错误:

    date_object = datetime.strptime(schedule_delivery, '%Y-%m-%d')
  File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains:  00:00:00
Run Code Online (Sandbox Code Playgroud)

python openerp

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

如何创建一个独立的非模态对话框

我正在尝试扩展此解决方案Non modal dialog

from PyQt5 import QtWidgets
dialog = None


class Dialog(QtWidgets.QDialog):
    def __init__(self, *args, **kwargs):
        super(Dialog, self).__init__(*args, **kwargs)
        self.setWindowTitle('A floating dialog')
        self.resize(250,250)


class Window(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        button = QtWidgets.QPushButton('Open Dialog', self)
        button.clicked.connect(self.handleOpenDialog)
        self.resize(300, 200)
        self._dialog = None
        global dialog
        dialog = Dialog(self)
        dialog.show()

    def handleOpenDialog(self):
        if self._dialog is None:
            self._dialog = QtWidgets.QDialog(self)
            self._dialog.resize(200, 100)
        self._dialog.exec_()


if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

如果标题不相关,请道歉。我想要一个独立于所有现有窗口/对话框的对话框/窗口,并且可以始终与之交互,即应用程序窗口/任何对话框的 GUI 循环不会阻止这个非模型对话框。为简单起见,我使用了全局变量dialog在上面的代码片段中,它将保存非模态对话框实例。

当上面的程序运行时,主窗口和非模态对话框一起出现,两个对话框都是用户交互的,但是当按钮被点击时,GUI循环self._dialog开始,用户不能再与浮动对话框交互,和应用程序窗口。我想要的是能够与之互动 …

python pyqt modeless qdialog pyqt5

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