重建窗口

问题描述 投票:1回答:1

我正在使用PySide2重建一个窗口,如屏幕快照所示(您在屏幕快照中看到的是一个示例,Ueli App启动器,可在Github上找到,它是一个应用启动器,但是由于我对PySide2并不陌生,所以我不知道很多功能,在这里寻求帮助,我应该研究一下。

我需要:我在文本字段中键入一些内容(在屏幕截图中显示“测试”),满足我条件的选项会附加到UI上,以便我可以使用箭头键选择它们,然后按Enter键打开/运行程序/文件。我在所有与UI相关的问题上都遇到了麻烦,搜索命令已经是我的事了。

Ueli App launcher, available on Github

这里已经有一些代码了(用于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_())
python python-2.7 maya pyside2
1个回答
2
投票

[一种可能的解决方案是使用实现自定义绘画的委托创建QListView,对于过滤器,您可以使用QSortFilterProxyModel,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.