我试图编写一个连接到不同 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)
我有这个结果:

但我需要这个:

我该怎么做?
有没有办法直接浏览到使用QFileDialog的文件夹?
这意味着,不是在导航到目标文件夹时双击每个文件夹,只需在某处输入路径或使用Mac OS X上的Finder中的热键(Shift + Command + G).
谢谢!
编辑:(我的代码)
filter = "Wav File (*.wav)"
self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File",
"/myfolder/folder", filter)
self._audio_file = str(self._audio_file)
Run Code Online (Sandbox Code Playgroud) 在我的 gui 文件中,我创建了一个 QTableView,如下所示(这是 Qt Designer 自动生成的部分):
self.pnl_results = QtGui.QTableView(self.tab_3)
font = QtGui.QFont()
font.setPointSize(7)
self.pnl_results.setFont(font)
self.pnl_results.setFrameShape(QtGui.QFrame.StyledPanel)
self.pnl_results.setFrameShadow(QtGui.QFrame.Sunken)
self.pnl_results.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
self.pnl_results.setShowGrid(True)
self.pnl_results.setSortingEnabled(True)
self.pnl_results.setCornerButtonEnabled(True)
self.pnl_results.setObjectName("pnl_results")
Run Code Online (Sandbox Code Playgroud)
然后,我定义一个模型,使我能够将 pandas 数据框链接到 QTableView:
class PandasModel(QtCore.QAbstractTableModel):
"""
Class to populate a table view with a pandas dataframe
"""
def __init__(self, data, parent=None):
QtCore.QAbstractTableModel.__init__(self, parent)
self._data = data
def rowCount(self, parent=None):
return len(self._data.values)
def columnCount(self, parent=None):
return self._data.columns.size
def data(self, index, role=QtCore.Qt.DisplayRole):
if index.isValid():
if role == QtCore.Qt.DisplayRole:
return str(self._data.values[index.row()][index.column()])
return None
def headerData(self, col, orientation, role):
if orientation …Run Code Online (Sandbox Code Playgroud) 我正在尝试将“sys.stdout”重定向到QTextEdit,这是我的代码:
class Communicate(QObject):
printText = pyqtSignal()
def write(self, text):
self.printText.emit(str(text))
class UI(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self)
...
self.textedit = QTextEdit(self)
self.textedit.setGeometry(400,20,220,300)
self.c = Communicate()
self.c.printText.connect(self.textedit.insertPlainText)
sys.stdout = self.c
if __name__ == "__main__":
...
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我得到了TypeError: Communicate.printText[] signal has 0 argument(s) but 1 provided. 但是当我试图不提供任何参数时self.printText.emit(),它说self.textedit.insertPlainText需要 1 个参数。我错过了什么?您的回答将不胜感激。
我是编码和 python 的初学者。我读到 tkinter 有点“基础”,如果你想开发一个有点复杂的应用程序,而 PyQt 在许可方面有问题。这就是为什么我选择PySide2来开发这种项目,但发现目前文档相对较少。这是正确的选择吗?
我目前的编码问题如下:我试图用 PySide2 加载图像但没有成功。这是我2次尝试的代码:
尝试 N°1:
import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img)
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)
label.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
Traceback (most recent call last):
File "<ipython-input-1-86961df4959d>", line 8, in <module>
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)
TypeError: descriptor 'setPixmap' requires a 'PySide2.QtWidgets.QLabel' object but received a 'PySide2.QtGui.QPixmap'
Run Code Online (Sandbox Code Playgroud)
使用回溯中的信息,我尝试了以下尝试 N°2:
import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img) …Run Code Online (Sandbox Code Playgroud) python ×8
pyqt ×7
qt ×5
pyqt5 ×3
pyqt4 ×2
qtextedit ×2
childwindow ×1
image ×1
layout ×1
menu ×1
pandas ×1
pyside ×1
pyside2 ×1
python-2.7 ×1
python-3.x ×1
qfiledialog ×1
qlabel ×1
qpixmap ×1
qtableview ×1
qtablewidget ×1
sorting ×1
stdout ×1
window ×1