我嘗試過這個。
from PySide2 import QtWidgets
from PySide2 import QtGui
from PySide2 import QtCore
from PySide2.QtUiTools import QUiLoader
from maya.app.general.mayaMixin import MayaQWidgetBaseMixin
import shiboken2 as shiboken
import os
UIFILEPATH = 'D:/MAYA/pyside_pick/ui/PicsTest5.ui'
class MainWindow(MayaQWidgetBaseMixin,QtWidgets.QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.UI = QUiLoader().load(UIFILEPATH)
self.setWindowTitle(self.UI.windowTitle())
self.setCentralWidget(self.UI)
#image
img = QtGui.QPixmap('D:/MAYA/pyside_pick/images/imgKohaku.png')
self.scene = QtWidgets.QGraphicsScene(self)
item = QtWidgets.QGraphicsPixmapItem(img)
self.scene.addItem(item)
self.UI.graphicsView_char_1.setScene(self.scene)
#filter
self._filter = Filter()
self.installEventFilter(self._filter)
self.UI.pSphere1.installEventFilter(self._filter)
#primary
self.UI.label.setStyleSheet("QLabel {color : white;}")
self.UI.label.setText("A")
def labelTest(self):
self.UI.label.setStyleSheet("QLabel {color : red;}")
self.UI.label.setText("B")
print('D')
return False
class Filter(QtCore.QObject):
def eventFilter(self, widget, event):
win = MainWindow()
if event.type() == QtCore.QEvent.MouseButtonPress:
print(widget.objectName())
cmds.select(widget.objectName())
win.labelTest()
return False
def main():
win = MainWindow()
win.show()
if __name__ == '__main__':
main()
我單擊了“pSphere1”按鈕,但
self.UI.label.setStyleSheet("QLabel {color : red;}") self.UI.label.setText("B")
看起來它不起作用。我可以在加載 UI 的情況下在定義內部更改它,但我不能從外部執行 setText 嗎?
如何更改匯入的 UI 檔案的標簽?我發現這個,但我真的不明白。在此頁面之外,我找不到任何提及它們的內容。 使用 PySide2 更改 Qt .ui 檔案中的組合框值 如果您知道,我還希望您告訴我將它們放在哪里。
uj5u.com熱心網友回復:
您的問題在 中eventFilter(),特別是第一行:
win = MainWindow()
這將創建一個新的主視窗實體,這顯然沒有意義,因為您顯然想與現有的進行互動。
雖然您可以將實體作為引數添加到過濾器建構式中,以便獲取對實體的參考并直接呼叫函式,但從 OOP 的角度來看,這并不是很好,因為物件不應該直接訪問他們的父母”。
更好和更正確的方法是使用自定義信號,并從主視窗實體連接它:
class Filter(QtCore.QObject):
testSignal = QtCore.Signal()
def eventFilter(self, widget, event):
if event.type() == QtCore.QEvent.MouseButtonPress:
print(widget.objectName())
cmds.select(widget.objectName())
self.testSignal.emit()
return False
class MainWindow(MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
def __init__(self, parent=None):
# ...
self._filter.testSignal.connect(self.labelTest)
請注意,小部件可以接受事件并阻止傳播(例如,具有可選擇或可移動專案的按鈕或圖形視圖),因此在這些情況下您可能不會在過濾器中收到事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/522655.html
