![](/img/trans.png)
[英]Process finished with exit code -1073740791 (0xC0000409) on PyCharm with XGBoost
[英]Getting exit code -1073740791 (0xC0000409) while trying to use mouse button pressed
我正在嘗試開發一個用戶界面來編輯圖像。 當我單擊鼠標左鍵時,我想存儲鼠標 position。 它吐出退出代碼-1073740791(0xC0000409)
不知道它為什么這樣做,或者不知道它的真正含義沒有設法找到它。 我正在與 Qt 設計師合作
到目前為止的代碼:
from PyQt5 import QtCore, QtGui, QtWidgets
# I have my event filter's
class MouseTracker(QtCore.QObject):
positionChanged = QtCore.pyqtSignal(QtCore.QPoint)
mouseclicked = QtCore.pyqtSignal(QtCore.Qt.MouseButton)
def __init__(self, widget):
super(MouseTracker, self).__init__(widget)
self._widget = widget
self.widget.setMouseTracking(True)
self.widget.installEventFilter(self)
@property
def widget(self):
return self._widget
def eventFilter(self, o, e):
if (o is self.widget and e.type() == QtCore.QEvent.MouseMove):
self.positionChanged.emit(e.pos())
return super().eventFilter(o, e)
def eventFilter(self,o,e):
if o is self.widget and e.type() == QtCore.QEvent.MouseButtonPress:
self.mouseclicked.emit(e.buttons())
#This is the thing from Qt designer
class Ui_Widget(object):
def setupUi(self, Widget):
Widget.setObjectName("Widget")
Widget.resize(700, 700)
Widget.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
Widget.setMouseTracking(False)
self.gridLayout = QtWidgets.QGridLayout(Widget)
self.gridLayout.setObjectName("gridLayout")
self.save = QtWidgets.QPushButton(Widget)
self.save.setObjectName("save")
self.gridLayout.addWidget(self.save, 2, 2, 1, 1)
self.cut = QtWidgets.QPushButton(Widget)
self.cut.setObjectName("cut")
self.gridLayout.addWidget(self.cut, 2, 1, 1, 1)
self.open = QtWidgets.QPushButton(Widget)
self.open.setObjectName("open")
self.gridLayout.addWidget(self.open, 2, 0, 1, 1)
self.pos_data = QtWidgets.QLabel(Widget)
self.pos_data.setText("")
self.pos_data.setObjectName("pos_data")
self.gridLayout.addWidget(self.pos_data, 0, 0, 1, 3, QtCore.Qt.AlignTop)
self.resim = QtWidgets.QLabel(Widget)
self.resim.setMouseTracking(True)
self.resim.setText("")
self.resim.setPixmap(QtGui.QPixmap("../../../Pictures/meme.png"))
self.resim.setScaledContents(True)
self.resim.setObjectName("resim")
self.tracker = MouseTracker(self.resim)
self.tracker.positionChanged.connect(self.on_positionChanged)
self.tracker.mouseclicked.connect(self.store_pos)
self.gridLayout.addWidget(self.resim, 4, 0, 1, 3)
self.label_position = QtWidgets.QLabel(
self.resim, alignment=QtCore.Qt.AlignCenter
)
self.label_position.setStyleSheet('background-color: white; border: 1px solid black')
self.retranslateUi(Widget)
QtCore.QMetaObject.connectSlotsByName(Widget)
def retranslateUi(self, Widget):
_translate = QtCore.QCoreApplication.translate
Widget.setWindowTitle(_translate("Widget", "Form"))
self.save.setText(_translate("Widget", "Kaydet"))
self.cut.setText(_translate("Widget", "Kırp"))
self.open.setText(_translate("Widget", "Dosya Aç"))
# this is the functions that works with move event signal
def on_positionChanged(self, pos):
delta = QtCore.QPoint(30, -15)
self.x = pos.x()
self.y = pos.y()
self.label_position.show()
self.label_position.move(pos + delta)
self.label_position.setText("(%d, %d)" % (pos.x(), pos.y()))
self.label_position.adjustSize()
# this is the functions that supposed to work with mouse clicked signal
#Program broke when i add this function and the signal
def store_pos(self, buttons):
if buttons == QtCore.Qt.LeftButton:
text = f'x: {self.x}, y: {self.y}'
self.pos_data.setText(text)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Widget = QtWidgets.QWidget()
ui = Ui_Widget()
ui.setupUi(Widget)
Widget.show()
sys.exit(app.exec_())
任何幫助表示贊賞。
在 python 中,如果類多次使用相同的方法,則只有最后一個有效,因此在您的情況下,只有第二個 eventFilter 有效,並且此方法必須返回 Boolean 但您不返回任何您不返回的內容滿足那個條件。 解決方案是:
class MouseTracker(QtCore.QObject):
positionChanged = QtCore.pyqtSignal(QtCore.QPoint)
mouseclicked = QtCore.pyqtSignal(QtCore.Qt.MouseButton)
def __init__(self, widget):
super(MouseTracker, self).__init__(widget)
self._widget = widget
self.widget.setMouseTracking(True)
self.widget.installEventFilter(self)
@property
def widget(self):
return self._widget
def eventFilter(self, o, e):
if o is self.widget:
if e.type() == QtCore.QEvent.MouseMove:
self.positionChanged.emit(e.pos())
elif e.type() == QtCore.QEvent.MouseButtonPress:
self.mouseclicked.emit(e.buttons())
return super().eventFilter(o, e)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.