我正在尝试创建一个允许用户选择多个目录的 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)
编辑:
所以在玩了更多之后,如果我在文件对话框中选择“详细信息视图”,多选就可以了。但是,如果我选择“列表视图”,则它不起作用。知道为什么吗?
我试图编写一个连接到不同 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()
谢谢
我正在寻找在 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++ 中有什么方法可以做到这一点?
我正在尝试对包含进度条的列进行排序。我希望列按进度条值排序。任何帮助都感激不尽

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) 我有一个关于如何在菜单中的图标和文本之间添加分隔符的问题。如果您有任何想法,那将非常有帮助。这正是我需要做的:
.
从一个按钮,打开一个菜单并添加像图像中的分隔符。
我的问题很难解释,但我尽力了。请在这方面帮助我。
我在 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 扩展时,这些答案是适用的,但我的情况不同。
我有这个代码:
#!/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)
我有这个结果:

但我需要这个:

我该怎么做?
我正在尝试显示一个网页,但由于它不会将对象视为字符串,因此无法正确显示换行符(显示\n)。我怎样才能正确地使结果成为一个字符串,因为这似乎不起作用。谢谢!
result = urllib.request.urlopen(requesturl).read()
return str(result)
Run Code Online (Sandbox Code Playgroud) 我想要一个如下的布局:

我正在使用QHBoxLayout并添加两个小部件 - 但这两个小部件都获得了 50% 的可用空间,而不是我需要的 25% / 75% 布局。
如何不均匀地分配小部件的区域?
我正在使用 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 ×9
pyqt ×8
qt ×4
pyqt5 ×3
layout ×2
pyqt4 ×2
qtextedit ×2
childwindow ×1
httpresponse ×1
menu ×1
python-2.7 ×1
python-3.5 ×1
qfiledialog ×1
qtablewidget ×1
qtreeview ×1
sorting ×1
string ×1
window ×1