如何在QLineEdit中显示所选项目。这是我的密码。在第二个文件行中,59到61号文件没有问题问题:属性错误,无类型。如何纠正
在我的第一个文件(example_main_file.py)中,我有一个带有项目的QLineEdit和QListWidget。我的第二个文件(示例_source_文件)有一个方法来处理/过滤QLineEdit中的QListwidget项,并显示QListwidget所选项。但结果并不富有成效
First File / example_main_file.py
import sys
from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget,QListWidget
from example_source_file import Sourcefile
item = ["Python", "Python 2.7", "Python 2.9", "Python 3.5", "Python 3.7", "National", "Zebra",
"Apple", "X Ray", "Boat", "Tiger", "Item001", "Item002", "Item003", "Item004", "Item005",
"001Item", "002Item", "003Item", "004Item", "005Item", "Ball", "Cat", "Dog", "Fish",
"Gold Fish", "Star Fish", "2821", "2822", "2823", "2811", "2812", "2813"]
class Check(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Check Window")
self.textbox = QLineEdit(self)
self.textbox.setGeometry(100, 100, 300, 30)
self.textbox1 = QLineEdit(self)
self.textbox1.setGeometry(100,150,300,30)
self.lbox1 = QListWidget()
self.lbox2 = QListWidget(self)
self.lbox2.setGeometry(100,200,300,500)
self.lbox1.addItems(item)
self.lbox2.addItems(item)
process = Sourcefile(self.textbox, self.lbox1, self.lbox2)
process1 = Sourcefile(self.textbox1, self.lbox1, self.lbox2)
self.textbox.textChanged.connect(process.func_textbox_textchanged)
self.textbox1.textChanged.connect(process1.func_textbox_textchanged)
def main():
myapp = QApplication(sys.argv)
mywin = Check()
mywin.show()
sys.exit(myapp.exec_())
if __name__ == "__main__":
main()
Second File / example_source_file.py
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
flag = 1
search_text_length = 0
startitem_rowno = None
enditem_rowno = None
class Sourcefile(QObject):
def __init__(self, textbox,listbox1,listbox2,parent=None):
super().__init__(listbox2)
global startitem_rowno,enditem_rowno
self.tbox1 = textbox
self.lbox1 = listbox1
self.lbox2 = listbox2
self.tbox1.installEventFilter(self)
self.lbox2.installEventFilter(self)
startitem_rowno = 0
enditem_rowno = len(self.lbox2) - 1
def eventFilter(self, source, event):
global cursor_position, textbox_value
if event.type() == QEvent.KeyPress and source is self.tbox1:
if event.modifiers() == Qt.AltModifier and event.key() == Qt.Key_S:
self.func_item_startswith()
return True
if event.key() == Qt.Key_Down:
self.lbox2.setFocus()
self.lbox2.setCurrentRow(startitem_rowno)
cursor_position = self.tbox1.cursorPosition()
textbox_value = self.tbox1.text()
if event.key() == Qt.Key_Up:
self.lbox2.setFocus()
self.lbox2.setCurrentRow(enditem_rowno)
cursor_position = self.tbox1.cursorPosition()
textbox_value = self.tbox1.text()
if event.key() == Qt.Key_Return:
if len(self.lbox2) == 1:
self.lbox2.setCurrentRow(0)
prin = self.lbox2.currentItem().text()
print(prin)
if event.type() == QEvent.KeyPress and source is self.lbox2:
if event.key() == Qt.Key_Left or event.key() == Qt.Key_Backspace:
self.lbox2.clearFocus()
self.tbox1.setFocus()
elif event.key() == Qt.Key_Return:
prin = self.lbox2.currentItem().text()
print(prin)
self.tbox1.setText(prin)
#self.label_selected_item.setText("Selected Item : " + prin)
#self.label_selected_item.adjustSize()
self.tbox1.setFocus()
self.tbox1.setText(prin)
elif event.key() == Qt.Key_Up or event.key() == Qt.Key_Down:
pass
return super(Sourcefile, self).eventFilter(source, event)
def func_item_startswith(self):
global flag, startitem_rowno, enditem_rowno
flag = 1
startitem_rowno = 0
enditem_rowno = startitem_count - 1
self.lbox2.clear()
if startitem_count > 0:
for item in item_startswith:
self.lbox2.addItem(item.text())
else:
print("No Matching from start item")
def func_item_normal(self):
global falg,startitem_rowno,enditem_rowno
flag = 0
startitem_rowno = 0
enditem_rowno = normal_count - 1
self.lbox2.clear()
if normal_count > 0:
for item in item_normal:
self.lbox2.addItem(item.text())
def func_textbox_textchanged(self, txt):
global search_text, search_text_length, total_listbox_item, availableitem_count, normal_count, startitem_count, \
containitem_count, enditem_count, item_normal, item_startswith, item_contains, item_endswith, flag, \
startitem_rowno, enditem_rowno
search_text = self.tbox1.text()
search_text_length = len(search_text)
total_listbox_item = len(self.lbox2)
item_normal = self.lbox1.findItems("*", Qt.MatchWildcard)
item_startswith = self.lbox1.findItems(search_text, Qt.MatchStartsWith)
normal_count = len(item_normal)
startitem_count = len(item_startswith)
self.func_item_normal()
if search_text_length >= 1: pass
else: flag = 1
self.lbox2.clear()
if flag == 1:
self.func_item_startswith()
else:
self.func_item_normal()
def listbox_clicked(self, item):
self.tbox1.setText(item.text())
self.tbox1.setFocus()
Error / Result
Traceback (most recent call last):
File "D:\PyQt5_samples\example_source_file.py", line 59, in eventFilter
prin = self.lbox2.currentItem().text()
AttributeError: 'NoneType' object has no attribute 'text'
说明:
按enter键时,将选中该项目,并将其复制到QLineEdit的文本中,然后调用项目筛选器,该筛选器将删除该项目,以便下一个项目中不再存在currentItem,从而返回错误
解决方案:
鉴于此,有两种可能的解决方案:
相关问题 更多 >
编程相关推荐