【发布时间】:2019-07-29 19:07:40
【问题描述】:
我有一个 QTableWidget,当单击一行时,它会选择该行中的所有单元格。我正在尝试添加“复制”功能,以便在选择行时可以 ^ctrl-c 并粘贴到文本编辑器中。但是,使用我当前的代码,一旦我 ^ctrl-c 一行,我复制的行就会不断被复制。
我在我的方法“read_clipboard”中实现了一个打印语句,以查看复制的行是否被读取,这就是我发现该行一直被复制的方式,就像在无限循环中一样。
之前关于 PyQt/Qt 和 QClipboard 的堆栈溢出问题都没有对我有效。
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.my_selector = self.my_tableWidget.selectionModel()
# Where I detect the signal to call my "read_clipboard" method
QtGui.QGuiApplication.clipboard().dataChanged.connect(self.read_clipboard)
self.show()
def read_clipboard(self):
selection = self.my_selector.selectedIndexes()
if selection:
print(selection)
QtGui.QGuiApplication.clipboard().clear()
QtGui.QGuiApplication.clipboard().setText(selection)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mainWin = MainWindow() # Creates MainWindow object
ret = app.exec_()
sys.exit(ret)
当我 ^ctrl-c 一行时,程序会连续打印“选择”,就好像它处于无限循环中一样,我不知道在它运行一次后如何停止它,以便我可以复制它一行。
【问题讨论】:
-
由于某种原因,当它运行
read_cliboard时,它认为它更改了数据,因此它从.dataChanged.connect()运行函数。在read_cliboard中,您可以在应对剪贴板之前断开它,并在应对后再次连接。
标签: python pyqt qtablewidget pyside2 qclipboard