我正在使用PySide2重建一个窗口,如屏幕快照所示(您在屏幕快照中看到的是一个示例,Ueli App启动器,可在Github上找到,它是一个应用启动器,但是由于我对PySide2并不陌生,所以我不知道很多功能,在这里寻求帮助,我应该研究一下。
我需要:我在文本字段中键入一些内容(在屏幕截图中显示“测试”),满足我条件的选项会附加到UI上,以便我可以使用箭头键选择它们,然后按Enter键打开/运行程序/文件。我在所有与UI相关的问题上都遇到了麻烦,搜索命令已经是我的事了。
这里已经有一些代码了(用于3D软件Maya):
from PySide2 import QtWidgets, QtCore
from PySide2.QtGui import *
from PySide2.QtWidgets import QDesktopWidget, QScrollArea
from maya import OpenMayaUI
from functools import partial
import sys
try:
from shiboken import wrapInstance
import shiboken
except:
from shiboken2 import wrapInstance
import shiboken2 as shiboken
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
window = OpenMayaUI.MQtUtil.mainWindow()
mayaWindow = shiboken.wrapInstance(long(window), QtWidgets.QMainWindow)
super(MainWindow, self).__init__(mayaWindow)
self.setWindowTitle('Test Window')
self.resize(630, 50);
self.setWindowFlags(QtCore.Qt.Popup | QtCore.Qt.WindowType.NoDropShadowWindowHint)
self.setStyleSheet("background-color: rgb(65, 65, 65);")
# main widget
main_widget = QtWidgets.QWidget(self)
self.setCentralWidget(main_widget)
# layout initialize
self.boxLayout = QtWidgets.QVBoxLayout()
main_widget.setLayout(self.boxLayout)
self.formLayout = QtWidgets.QFormLayout()
# Add Widgets
self.textField = QtWidgets.QLineEdit()
self.textField.setFont(QFont('Helvetica', 16))
self.textField.setStyleSheet("margin: 10px; padding: 10px; \
background-color: \
rgb(40,40,40);\
color: rgb(245,245,245); \
border-style: solid; \
border-radius: 3px; \
border-width: 0.5px; \
border-color: \
rgb(35,35,35);")
self.textField.textChanged.connect(self.searchForCommands)
self.formLayout.addRow(self.textField)
# global layout setting
self.boxLayout.addLayout(self.formLayout)
self.centerWindow()
self.textField.setFocus()
def mousePressEvent(self, QMouseEvent):
xPosition = QMouseEvent.pos().x()
yPosition = QMouseEvent.pos().y()
width = self.width()
height = self.height()
if xPosition > self.width() or xPosition < 0:
self.destroy()
if yPosition > self.height() or yPosition < 0:
self.destroy()
def centerWindow(self):
qRect = self.frameGeometry()
centerPoint = QDesktopWidget().availableGeometry().center()
qRect.moveCenter(centerPoint)
self.move(qRect.topLeft())
def searchForCommands(self):
test = ['Monkey', 'Giraffe', 'Dragon', 'Bull']
#scrollArea = QScrollArea()
#scrollArea.setWidget()
#formLayout.addRow(self.textField)
if self.textField.text().isspace() or self.textField.text() != ' ':
if self.textField.text() == '':
pass
else:
for x in test:
if self.textField.text() in x:
self.formLayout.addRow(QtWidgets.QPushButton(self.textField.text()))
print 'Input: "' + self.textField.text() + '" is in "' + x + '".'
if self.textField.text() == x:
print 'Input: "' + self.textField.text() + '" equals "' + x + '".'
if __name__ == '__main__':
app = QtWidgets.QApplication.instance()
if app is None:
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
#sys.exit(app.exec_())
[一种可能的解决方案是使用实现自定义绘画的委托创建QListView
,对于过滤器,您可以使用QSortFilterProxyModel
,如下所示: