小编ekh*_*oro的帖子

PyQt QFileDialog - 多目录选择

我正在尝试创建一个允许用户选择多个目录的 QFileDialog。

遵循此处的讨论和此处常见问题解答,但我不确定我做错了什么。我得到一个文件对话框,但它仍然只允许我选择一个目录(文件夹)。

这是在 Windows 7 上

代码:

class FileDialog(QtGui.QFileDialog):
        def __init__(self, *args):
            QtGui.QFileDialog.__init__(self, *args)
            self.setOption(self.DontUseNativeDialog, True)
            self.setFileMode(self.DirectoryOnly)

            self.tree = self.findChild(QtGui.QTreeView)
            self.tree.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

            self.list = self.findChild(QtGui.QListView)
            self.list.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    ex = FileDialog()
    ex.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

编辑:

所以在玩了更多之后,如果我在文件对话框中选择“详细信息视图”,多选就可以了。但是,如果我选择“列表视图”,则它不起作用。知道为什么吗?

python qt pyqt qtreeview qfiledialog

3
推荐指数
1
解决办法
2764
查看次数

@pyqtSignature() 和 @pyqtSlot() pyqt 装饰器有什么区别

我试图编写一个连接到不同 pyqt 信号的插槽。我仍然无法理解的是两个装饰器 @pyqtSignature() 和 @pyqtSlot() 之间的区别。

连接到从 QAbstractButton 继承的 QPushButton 的 pyqt 单击信号的示例,on_widgetName_signalName在使用 @pyqtSignature("") 时,我使用了以下语法:

@pyqtSignature("")
def on_bn_gpx_select_file_clicked(self):  
    """
    Run when QPushButton is pressed, or do something
    """
    pass
Run Code Online (Sandbox Code Playgroud)

现在使用 @pyqtSlot() 时

@pyqtSlot()
def on_bn_gpx_select_file_clicked(self):  
    """
    Run when QPushButton is pressed, or do something
    """
    pass
Run Code Online (Sandbox Code Playgroud)

我的问题是,这两个装饰器有什么区别,什么时候应该使用 @pyqtSignature 或 @pyqtSlot()

谢谢

python qt pyqt signals-slots pyqt4

3
推荐指数
1
解决办法
4606
查看次数

PyQt:在 QStyledItemDelegate 中使用 QTextEdit 作为编辑器

我正在寻找在 QStyledItemDelegate 中使用多行文本编辑的干净方法。createEditor 的实现非常简单,返回一个 QTextEdit 实例

def createEditor(self, parent, option, index):
    return QtGui.QTextEdit("Some text")
Run Code Online (Sandbox Code Playgroud)

setModelData期望派生出一个 Edit WidgetQWidget作为参数而不是QTextEditsbase QScrollArea。Qt 文档还告诉我(至少在 PyQt 文档中)该setModelData函数尝试从 QWidget UserData 字段获取数据。但是,如果没有派生的编辑小部件,QWidget则无法设置数据。目前它抛出一个,因为它在编辑器上AttributeError找不到。text()

是否有一些行之有效的方法来使用非 QWidget 编辑器?或者我只是缺少一些小部件来做到这一点?

目前,我通过实例化 aQLineEdit并将其QTextEdit传递toPlainText()给 来快速解决了该问题setModelData。非常哈克!!我还可以使用鸭子类型并在派生类上实现一个text()方法QTextEdit。但这仍然不是一个好方法,不是吗?在 C++ 中有什么方法可以做到这一点?

python pyqt qitemdelegate qtextedit qstyleditemdelegate

3
推荐指数
1
解决办法
2340
查看次数

在 QTableWidget 中使用 setCellWidget 对列进行排序

我正在尝试对包含进度条的列进行排序。我希望列按进度条值排序。任何帮助都感激不尽 在此处输入图片说明

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


class Example(QMainWindow):

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

        self.initUI()

    def initUI(self):

        self.tablew = Table(self)
        self.setCentralWidget(self.tablew)

        self.setGeometry(300, 300, 300, 200)
        self.show()


class ProgressBar(QProgressBar):

    def __init__(self, value, parent=None):
        QProgressBar.__init__(self)
        self.setMinimum(1)
        self.setMaximum(5.0)
        self.setValue(value)
        self.setFormat('{0:.5f}'.format(value))
        style = ''' QProgressBar{max-height: 15px;text-align: center;}'''
        self.setStyleSheet(style)


class Table(QTableWidget):

    def __init__(self,   parent=None):
        QTableWidget.__init__(self)
        self.setColumnCount(2)
        self.setHorizontalHeaderLabels(['id', 'status'])
        header = self.horizontalHeader()
        header.setResizeMode(QHeaderView.Stretch)
        self.setSortingEnabled(True)
        self.loadData()
        #

    def loadData(self):
        #
        tableData = [[89, 4.8], [99, 3.9], [101, 2.6], [105, 4]]
        #
        self.setRowCount(len(tableData))
        #
        for …
Run Code Online (Sandbox Code Playgroud)

sorting pyqt pyqt4 qtablewidget python-2.7

3
推荐指数
1
解决办法
2222
查看次数

在菜单中的图标和文本之间添加垂直分隔符

我有一个关于如何在菜单中的图标和文本之间添加分隔符的问题。如果您有任何想法,那将非常有帮助。这正是我需要做的:

预览.

从一个按钮,打开一个菜单并添加像图像中的分隔符。

python qt menu pyqt pyqt5

3
推荐指数
1
解决办法
5546
查看次数

如何从主窗口打开子窗口

我的问题很难解释,但我尽力了。请在这方面帮助我。

我在 QtDesigner 中设计了一个 gui,并将 .ui 文件转换为 .py,例如 main_window.py。现在为了避免在 main_window.py 中进行更改,我为侦听器创建了另一个类。

class Main():    
    window = None
    app = None

    def __init__(self):
        self.launch()
        self.attach_listener()
        self.execute()

    ''' Launch GUI '''
    def launch(self):
        self.app = QtGui.QApplication(sys.argv)
        self.window = Ui_MainWindow()
        self.window.show()

    ''' Execute Window '''
    def execute(self):
        sys.exit(self.app.exec_())

    ''' Attach Listeners '''
    def attach_listener(self):
        self.window.add_button.clicked.connect(self.add_listener)
        self.window.delete_button.clicked.connect(self.delete_listener)
        self.window.update_button.clicked.connect(self.update_listener)
        self.window.connect(self.window.combo_box, QtCore.SIGNAL('activated(QString)'), self.logout_listener)
Run Code Online (Sandbox Code Playgroud)

我有另一个具有相同结构的 child_window.py,但由于 QApplication,我无法从这个窗口打开该窗口。我搜索了答案,但无法应用于我的代码。当类从 QtGui.QMainWindow 或 QtGui.QWidget 扩展时,这些答案是适用的,但我的情况不同。

python window pyqt childwindow

3
推荐指数
1
解决办法
5806
查看次数

如何在布局中组合列(colspan 功能)

我有这个代码:

#!/usr/bin/env python3

from PyQt5.QtWidgets import *
import sys    

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        layout = QGridLayout()
        self.setLayout(layout)

        label_1 = QLabel("label 1")
        layout.addWidget(label_1, 0, 0)

        label_2 = QLabel("label 2")
        layout.addWidget(label_2, 0, 1)

        label_3 = QLabel("label 3")
        layout.addWidget(label_3, 1, 0)


app = QApplication(sys.argv)

screen = Window()
screen.show()

sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

我有这个结果:

当前代码的图像示例

但我需要这个:

我需要的代码的图像示例

我该怎么做?

python layout qt pyqt pyqt5

3
推荐指数
1
解决办法
4560
查看次数

对字符串python的Httpresponse

我正在尝试显示一个网页,但由于它不会将对象视为字符串,因此无法正确显示换行符(显示\n)。我怎样才能正确地使结果成为一个字符串,因为这似乎不起作用。谢谢!

result = urllib.request.urlopen(requesturl).read()
return str(result)
Run Code Online (Sandbox Code Playgroud)

python string httpresponse python-3.5

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

PyQt:不均等地划分QHBoxLayout中小部件占用的区域

我想要一个如下的布局:

布局

我正在使用QHBoxLayout并添加两个小部件 - 但这两个小部件都获得了 50% 的可用空间,而不是我需要的 25% / 75% 布局。

如何不均匀地分配小部件的区域?

python layout user-interface pyqt

3
推荐指数
1
解决办法
2287
查看次数

QTextEdit textChanged 信号异常

我正在使用 Python3 和 PyQt5 创建一个包含表单元素(例如QLineEdit和 )的应用程序QTextEdit

我从 a 收集数据QLineEdit如下(工作正常):

    self.rolAdi = QtWidgets.QLineEdit(self.centralWidget)
    self.rolAdi.setObjectName("rolAdi")

    self.rolAdi.textChanged.connect(self.textSonDurum)

def textSonDurum(self, s):
    print("Text changed...>>> "+s)
Run Code Online (Sandbox Code Playgroud)

但是,使用控件的相同方法QTextEdit不起作用 - 每当我更改控件的内容时,程序都会停止:

   self.IP = QtWidgets.QTextEdit(self.centralWidget)
   self.IP.setObjectName("IP")

   self.IP.textChanged.connect(self.textSonDurum)

def textSonDurum(self, s):
    print("Text changed...>>> "+s)
Run Code Online (Sandbox Code Playgroud)

我研究了这个问题,发现了一个涉及使用断开连接功能的建议,但在 PyQt5 中找不到它。

self.IP.textChanged.disconnect()
Run Code Online (Sandbox Code Playgroud)

输出错误

TypeError: disconnect() failed between 'textChanged' and all its connections
Run Code Online (Sandbox Code Playgroud)

(完整的代码很长,无法粘贴到此处,但如果您需要任何其他部分,请告诉我)。

python signals-slots qtextedit pyqt5

3
推荐指数
1
解决办法
4596
查看次数