私はPyQtに潜入しています。私はちょっと気になっています。 SLOT( 'insertColumn()')は、GUIのボタンに接続しても何もしません。 SLOT( 'clear()')は完全に動作し、insertColumn()はバインディングの外で動作します。 insertColumn()はQtのドキュメントにパブリックスロットとして記載されています。ここでなぜSLOT( 'insertColumn()')がPyQtバインディングで失敗するのですか?
コードです:
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)'))
私はtableWidgetとself.tableWidgetとしてQTableWidgetを定義しようとしたが、それは何も変更しませんでした。
これを引き起こしていることは誰でも知っていますか? this SO questionで説明したようにそれは新しい.connect()構文を使用しています
def add_column(self):
tableWidget.insertColumn(1)
self.MenuAddColumn.triggered.connect(add_column)
:
はここで最終的なコードです。再度、感謝します!
スロットを作成するための構文は何ですか?それは関数を定義するのと同じですか? – speedofmac
残念ながら私はpythonを知らない。それは非常に標準的なpython/Qtの使用ですが、例を見つけるのはあまり難しくありません。 –
Pythonクラスのメソッドを定義し、Slot(...)の代わりに接続するように渡します。 –