#python #python-3.x #pyqt5
#python #python-3.x #pyqt5
Вопрос:
Я пытаюсь использовать функцию QTreeWidget.FindItems, чтобы найти точное соответствие (элемент называется «Вещи») Я видел пример, использующий этот … Qt.MatchExactly … в качестве ‘флага соответствия’. несмотря на то, что я импортировал модуль Qt из PyQt5, совпадение точно не было найдено. Я заставил это работать, импортировав ДРУГОЙ модуль Qt, найденный в QtCore, в PyQt5. но это было после многих часов в течение нескольких дней поиска, угадывания и чтения сообщений StackOverflow.
Мой вопрос — как узнать, какой модуль содержит (и, следовательно, должен быть импортирован) нужные мне материалы? откуда мне знать, что Qt.Совпадение действительно находится в модуле PyQt5.QtCore.Qt (а НЕ в модуле PyQt5.Qt)?
Это мой код: Обратите внимание, что он считывается в файле QtDesigner .ui, поэтому у вас это не сработает. но смысл не в том, чтобы вы запускали этот код.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QMainWindow, QApplication, QTreeWidgetItem
from PyQt5 import uic, QtWidgets, Qt #<<flags are not here
from PyQt5 import QtCore
from PyQt5.QtCore import Qt #<<<this is where i found the match flag "MatchExactly"
qtCreatorFile = "Main2.ui" # Enter qt Designer file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyApp(QMainWindow):
def __init__(self):
super(MyApp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.InitModelContentTree()
def InitModelContentTree (self):
modelContentTree = self.ui.ModelContentTree
ThingsItemList = modelContentTree.findItems("Things", Qt.MatchExactly)
ThingsItem = ThingsItemList[0]
QTreeWidgetItem(ThingsItem, ["New Thing"])
print("pause")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
я надеюсь, что есть кольцо декодера, какая-то базовая вещь, которой мне не хватает. я оказался очень плохим, очень неэффективным угадывателем.
Ответ №1:
На самом деле Qt.Совпадение действительно есть в Qt, но вы должны импортировать его другим способом:
from PyQt5 import Qt
# ...
ThingsItemList = modelContentTree.findItems("Things", Qt.Qt.MatchExactly)
TL; DR
Подмодуль Qt — это поддельный модуль, который разрешает доступ к любому модулю, такому как псевдоним, например, он похож на:
from PyQt5 import QtCore as Qt
from PyQt5 import QtGui as Qt
from PyQt5 import QtWidgets as Qt
# ...
# The same for all submodules
Например, это можно проверить на Qt.Точно соответствовать:
from PyQt5 import Qt, QtCore
assert(QtCore.Qt.MatchExactly == Qt.Qt.MatchExactly)
Итак, в общем, следующий импорт:
from PyQt5 import somemodule
somemodule.someclass
Это эквивалентно:
from PyQt5 import Qt
Qt.someclass
Как узнать, к какому подмодулю принадлежит класс?: Ну, если у вас есть IDE, которая может создавать самоотчет, подобный pycharm, задача проста, поскольку IDE сама это делает. Но если у меня нет доступа к IDE, другой вариант — использовать документы Qt, например, документы Qt::MatchExactly находится по этой ссылке, которая в первой части представляет собой следующую таблицу:
И обратите Qt = core
внимание, что все элементы этих документов принадлежат основному подмодулю Qt, который в PyQt / PySide соответствует QtCore (в общем случае, если документы Qt указывают Qt = mymodule
в PyQt / PySide в QtMyModule
).Также Qt::MatchExactly
из C соответствует Qt.MatchExactly
в python. Итак, в заключение вы должны использовать:
from PyQt5 import QtCore
QtCore.Qt.MatchExactly