Python 为什么插槽(';insertColumn()';)在PyQt绑定中失败?
我正在潜入PyQt,我遇到了一点麻烦SLOT('insertColumn()')当连接到GUI中的按钮时,不会执行任何操作SLOT('clear()')工作正常,insertColumn()在绑定之外工作insertColumn()在Qt文档中被列为公共插槽,所以我被卡住了 代码如下:Python 为什么插槽(';insertColumn()';)在PyQt绑定中失败?,python,qt,qt4,pyqt,pyqt4,Python,Qt,Qt4,Pyqt,Pyqt4,我正在潜入PyQt,我遇到了一点麻烦SLOT('insertColumn()')当连接到GUI中的按钮时,不会执行任何操作SLOT('clear()')工作正常,insertColumn()在绑定之外工作insertColumn()在Qt文档中被列为公共插槽,所以我被卡住了 代码如下: class MainWindow(QMainWindow): def __init__(self, *args): QMainWindow.__init__(self, *args)
class MainWindow(QMainWindow):
def __init__(self, *args):
QMainWindow.__init__(self, *args)
# Table
self.tableWidget = QTableWidget(6, columnCount, self);
x = 0
for x in range(0, columnCount):
self.tableWidget.setColumnWidth(x, 30)
for x in range(0, 6):
self.tableWidget.setRowHeight(x, 24)
# Window geometery and layout
self.resize(800, 600)
self.setWindowTitle('PyTab')
self.setCentralWidget(self.tableWidget)
# Menu and toolbar actions
self.MenuExit = QAction(QIcon('exit.png'), 'Exit', self)
self.MenuExit.setShortcut('Ctrl+Q')
self.connect(self.MenuExit, SIGNAL('triggered()'), SLOT('close()'))
self.MenuAddColumn = QAction(QIcon('clear.png'), 'Add Column', self)
self.MenuAddColumn.setShortcut('Ctrl+N')
#This line works:
self.tableWidget.insertColumn(2)
# I'm not sure why this line isn't working:
self.connect(self.MenuAddColumn, SIGNAL('triggered()'), self.tableWidget, SLOT('insertColumn(2)'))
我尝试将QTableWidget定义为tableWidget和self.tableWidget,但这并没有改变任何事情
有人知道这是什么原因吗
以下是最终代码:
def add_column(self):
tableWidget.insertColumn(1)
self.MenuAddColumn.triggered.connect(add_column)
它使用新的.connect()语法,如中所述。再次感谢 对.connect()
的调用仅设置信号和插槽的关系。实际上,无法在.connect()
调用中将值传递到插槽。您可以创建自己的插槽,并将其放入对.connect()
的调用中,然后放入自己的插槽实现调用self.tableWidget.insertColumn(2)
编辑:
只是澄清一下。虽然插槽不能在调用
.connect()
时直接获取值,但它可以接收为信号定义的参数。将信号与插槽关联时,您只需提供方法符号,而不应向其传递参数。另外,作为插槽提供的方法的签名应该与信号的签名匹配。根据Qt文件
QAction触发信号的特征如下:(Qt版本4.7.0)
无效QAction::已触发(bool checked=false)
基本上,您需要将触发的信号连接到需要布尔参数的方法
您可以尝试使用如下代码片段:(未测试)
self.connect(self.menuadd列,信号('triggered(bool)),
自我,插槽('colAddition(bool)')
创建插槽的语法是什么?与定义函数相同吗?不幸的是,我不懂python。这是非常标准的python/Qt用法,因此不难找到一个示例。(或者有python/Qt经验的人会为您提供更完整的答案)只需在python类上定义一个方法,并将其传递给connect而不是Slot(…)@speedofmac,有关详细信息,请参阅,但基本上您可以传递任何python callable to connect(),而不是receiver/Slot对。感谢大家帮我解决这个问题。我为问题添加了最后一段代码。
def colAddition(self,value):
if value:
self.tableWidget.insertColumn(2)