Python 3.x 通过动态搜索和自动完成将旧值返回到组合框
我有一个重新实现的组合框,可以执行动态搜索和自动完成(代码不是我的)。问题是,当我键入与组合框列表中的任何值都不匹配的内容并按enter键时,我收到一个空字符串。但我希望接收一个旧值,在我开始键入其他值之前,它在combobox中。有人能帮我吗 我还想问Python 3.x 通过动态搜索和自动完成将旧值返回到组合框,python-3.x,combobox,pyqt5,Python 3.x,Combobox,Pyqt5,我有一个重新实现的组合框,可以执行动态搜索和自动完成(代码不是我的)。问题是,当我键入与组合框列表中的任何值都不匹配的内容并按enter键时,我收到一个空字符串。但我希望接收一个旧值,在我开始键入其他值之前,它在combobox中。有人能帮我吗 我还想问ExtendedComboBox类中两个字符串的含义(只要代码不是我的): 如果文本为,则在激活的_completer_上的函数内有表达式;我不明白这是什么意思,因为我总是写整个表达式(比如如果text==True:或者类似的东西) 我不理解se
ExtendedComboBox
类中两个字符串的含义(只要代码不是我的):
内有表达式;我不明白这是什么意思,因为我总是写整个表达式(比如如果text==True:
或者类似的东西)
pyqt
中看到过当方括号中的内容直接出现在信号之后时的这种构造当组合框设置为可编辑时,默认情况下,按return键时,允许在当前模型底部插入不存在的项。由于该代码中使用的模型是不可编辑的,当按返回键时,无法识别文本,组合框无法添加新项(并选择它),这导致将索引设置为-1 您可以连接嵌入式QLineEdit信号,检查当前索引是否有效;这是可能的,因为信号之前也连接到组合框插入,所以当您收到信号时,组合框已经尝试添加新项,并最终设置(可能)无效索引 为了存储上一个索引,只需连接到并保存它,只要它大于或等于0即可
class ExtendedComboBox(QtWidgets.QComboBox):
def __init__(self, parent=None):
# ...
self.lineEdit().returnPressed.connect(self.returnPressed)
self.currentIndexChanged.connect(self.storePreviousIndex)
self.previousIndex = self.currentIndex()
def storePreviousIndex(self, index):
if index >= 0:
self.previousIndex = index
def returnPressed(self):
if self.currentIndex() < 0 or self.currentText() != self.itemText(self.currentIndex()):
self.setCurrentIndex(self.previousIndex)
class ExtendedComboBox(qtwidts.QComboBox):
def uuu init uuu(self,parent=None):
# ...
self.lineEdit().returnPressed.connect(self.returnPressed)
self.currentIndexChanged.connect(self.storePreviousIndex)
self.previousIndex=self.currentIndex()
def storePreviousIndex(自身,索引):
如果索引>=0:
self.previousIndex=索引
def返回按下(自):
如果self.currentIndex()小于0或self.currentText()!=self.itemText(self.currentIndex()):
self.setCurrentIndex(self.previousIndex)
请注意,returnPressed
中的第二个比较是在未调用setModel()
且插入策略为NoInsert
的情况下,为默认内部模型添加兼容性
关于最后两个问题:
语句检查条件是否为真,或者如果需要,条件是否为假,如“NotNothing”(又名,false,0,None);您可以使用简单的语句进行一些实验,以更好地理解:if
,如果为True:
,如果为1:
将全部作为有效条件,而如果为“某物”:
,如果为False:
或如果为0:
则不是如果为“”:
- 有些信号的参数有多个签名,这意味着同一信号可以发出多次,每次都有不同类型的参数;例如,QComboBox的
信号会发出两次,第一次是带有新的当前索引的激活的
,然后带有新的当前文本;每当您想要连接(或发出)不是默认重载的重载时,都需要在括号中指定签名。在上面的例子中,只为int
签名显式发出信号(但我不知道为什么str
没有)。请注意,过载信号在Qt中逐渐消除(事实上,自Qt 5.14以来,int
的activated()
签名被认为是过时的)[str]
class ExtendedComboBox(QtWidgets.QComboBox):
def __init__(self, parent=None):
# ...
self.lineEdit().returnPressed.connect(self.returnPressed)
self.currentIndexChanged.connect(self.storePreviousIndex)
self.previousIndex = self.currentIndex()
def storePreviousIndex(self, index):
if index >= 0:
self.previousIndex = index
def returnPressed(self):
if self.currentIndex() < 0 or self.currentText() != self.itemText(self.currentIndex()):
self.setCurrentIndex(self.previousIndex)