PySide2 получает пиксели, нажимаемые на изображение - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь создать небольшое приложение, которое возвращает список пикселей x и y, щелкнувших по изображению. Я нашел несколько примеров, но, похоже, ни один из них мне не подходит. По сути, событие ничего не возвращает, и в cmd ничего не печатается. Я использовал PySide2 долгое время go и только для простых вещей. Что я здесь делаю не так? Вот мой код:

from PySide2.QtXml import QDomNode
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QLabel, QMainWindow
from PySide2.QtCore import QFile, QObject, Slot
from PySide2.QtGui import QIcon, QPixmap, QImage
import sys
import os.path


def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath('.')
    return os.path.join(base_path, relative_path)

    
class Form(QObject):

    def __init__(self, ui_file, parent = None):

        super(Form, self).__init__(parent)
        ui_file = resource_path('mainwindow.ui')
        ui_file = QFile(ui_file)
        ui_file.open(QFile.ReadOnly)
        loader = QUiLoader()
        self.window = loader.load(ui_file)
        ui_file.close()
        
        self.label = self.window.findChild(QLabel, 'label')
        self.label.setPixmap(QPixmap("download.jpg"))
        self.label.setScaledContents(True)
        self.label.mousePressEvent = self.getPos
        self.window.show()

    def getPos(self , event):
        x = event.pos().x()
        y = event.pos().y()     
        print(f'[{x}, {y}]')
        return x, y
        
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.processEvents()
    form = Form('mainwindow.ui')
    sys.exit(app.exec_())

И мой файл пользовательского интерфейса:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>30</y>
      <width>741</width>
      <height>511</height>
     </rect>
    </property>
    <property name="text">
     <string>TextLabel</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

Как только это сработает, я хотел бы добавить еще один QLabel или что-то подобное под изображением, которое будет показывать все щелкнули пиксели.

...