【发布时间】:2015-03-07 12:09:31
【问题描述】:
UPDATE3 - 通过保留解决,请在下面查看我的解决方案;将其打开,因为问题的原因尚不清楚,而且我不知道解决方案有多强大。
UPDATE1:这是简短的版本。
目前,在 QComboBox 上的 .setEditText 之后,我得到了这个:
所以您输入的下一个内容将覆盖“团队”。
但是想要的效果是这样(未突出显示/未选择),因此您输入的下一个内容将附加到“团队”而不是覆盖它:
感谢您的帮助。乱七八糟的细节如下,这是原帖:
(这都是 PyQt 5.4)
更新 2: 显然 python 认为实际上没有选择任何东西:
self.entryForm.ui.teamField.lineEdit().setText("Team ")
print("selected text:"+self.entryForm.ui.teamField.lineEdit().selectedText())
打印“选定的文本:”,仅此而已。为确保其正常工作:
self.entryForm.ui.teamField.lineEdit().setText("Team ")
self.entryForm.ui.teamField.lineEdit().setSelection(0,4)
print("selected text:"+self.entryForm.ui.teamField.lineEdit().selectedText())
打印“选定的文本:团队”
所以这可能就是为什么许多影响选择的方法不能按预期工作的原因(.deselect()、.setSelection(5,5) 等,甚至其他一些方法也会产生意想不到的行为,即 cursorForward( False,1) 或 cursorBackward(False,1) 等。
原帖:
这是用于无线电日志 GUI,因此键盘交互必须最少且直观。 openNewEntryForm(下)作为一个插槽从主应用程序 GUI 窗口上的按钮调用:
self.ui.pushButton.clicked.connect(self.openNewEntryDialog)
也可以在同一个类中使用 keyPressEvent 调用:
def keyPressEvent(self,event):
if type(event)==QKeyEvent:
print("QKeyEvent:"+str(event.key()))
if event.key()==Qt.Key_T:
self.openNewEntryDialog('t')
event.accept()
else:
event.ignore()
这是有问题的方法:
def openNewEntryDialog(self,key=None):
self.entryDialog=newEntryDialog()
if key=='t':
self.entryDialog.ui.to_fromField.setCurrentIndex(1)
self.entryDialog.ui.teamField.setFocus()
self.entryDialog.ui.teamField.setEditText("Team ")
if self.entryDialog.exec_():
self.newEntry(self.entryDialog.getValues()) # adds the log entry
因此,预期的按键顺序是(从主应用程序 GUI 窗口):
按一次键盘“t”将打开 entryForm,将 to_fromField 设置为索引 1(恰好是“TO”),将焦点放在 teamField(也是一个 QComboBox),将其文本设置为“Team”和设置自己,以便下一个按键将显示为 teamField 中“团队”之后的文本。
所以,再次从主应用程序 GUI 开始,计划是键入“t3”应该打开新的输入窗口,将 to_fromField 设置为“TO”,并将 teamField 设置为“Team 3”,准备好按键的 tab 键移动到 entryForm 中的下一个字段。
问题在于teamField.setEditText("Team ") 调用会突出显示/选中所有文本,因此随后按下'3' 会将"Team " 替换为"3";我正在寻找一种方法来取消突出显示/取消选择“团队”,但让光标在该字符串的右侧保持活动状态,以便随后按下'3' 将使整个字符串变为"Team 3"。
想法?提前致谢。
【问题讨论】:
标签: user-interface pyqt qcombobox