Ejemplo n.º 1
0
    def moveToCenter(self):
        desktop = QDesktopWidget()
        desktopSize = (desktop.screenGeometry().width(),
                       desktop.screenGeometry().height(),
                       desktop.availableGeometry().width(),
                       desktop.availableGeometry().height())

        self.resize(desktopSize[0] / 1.5, 30)
Ejemplo n.º 2
0
    def init_window_size(self):
        desktop = QDesktopWidget()
        max_widget_height = desktop.availableGeometry(
            desktop.screenNumber(self)).height() - 50
        max_widget_width = desktop.availableGeometry(
            desktop.screenNumber(self)).width()

        self.setMaximumWidth(int(max_widget_width))
        self.setMaximumHeight(int(max_widget_height))
Ejemplo n.º 3
0
class MessageTip(QWidget):
    def __init__(self, msg: str):
        super().__init__()
        self.initUI(msg)

    def initUI(self, msg: str):
        self.setGeometry(300, 300, 350, 120)
        self.setStyleSheet("background-color: blue")
        self.setWindowFlags(Qt.FramelessWindowHint)
        layout = QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        label = QLabel()
        label.setText(msg)
        layout.addWidget(label)
        self.setLayout(layout)
        self.desktop = QDesktopWidget()
        self.move((self.desktop.availableGeometry().width() - self.width()),
                  self.desktop.availableGeometry().height())  #初始化位置到右下角
        self.showAnimation()

    def showAnimation(self):
        #显示弹出框动画
        self.animation = QPropertyAnimation(self, b'pos')
        self.animation.setDuration(500)
        self.animation.setStartValue(QPoint(self.x(), self.y()))
        self.animation.setEndValue(
            QPoint(
                (self.desktop.availableGeometry().width() - self.width()),
                (self.desktop.availableGeometry().height() - self.height())))
        self.animation.start()
        #设置弹出框1秒弹出,然后渐隐
        self.remainTimer = QTimer()
        self.remainTimer.timeout.connect(self.closeAnimation)
        self.remainTimer.start(1000)  #定时器3秒

    def closeAnimation(self):
        #清除Timer和信号槽
        self.remainTimer.stop()
        #self.disconnect(self.remainTimer,SLOT("closeAnimation()"))
        self.remainTimer.timeout.disconnect(self.closeAnimation)
        self.remainTimer.deleteLater()
        self.remainTimer = None
        #弹出框渐隐
        self.animation = QPropertyAnimation(self, b"windowOpacity")
        self.animation.setDuration(1000)
        self.animation.setStartValue(1)
        self.animation.setEndValue(0)
        self.animation.start()
        #动画完成后清理
        #self.connect(self.animation,SIGNAL("finished()"),SLOT("clearAll()"))
        self.animation.finished.connect(self.clearAll)

    def clearAll(self):
        self.close()
Ejemplo n.º 4
0
class Message(QDialog):
    def __init__(self):
        self.desktop = QDesktopWidget()
        self.move((self.desktop.availableGeometry().width() - self.width()),
                  self.desktop.availableGeometry().height())  # 初始化位置到右下角
        self.showAnimation()

    # 弹出动画
    def showAnimation(self):
        # 显示弹出框动画
        self.animation = QPropertyAnimation(self, "pos")
        self.animation.setDuration(1000)
        self.animation.setStartValue(QPoint(self.x(), self.y()))
        self.animation.setEndValue(
            QPoint((self.desktop.availableGeometry().width() - self.width()),
                   (self.desktop.availableGeometry().height() - self.height() +
                    self.SHADOW_WIDTH)))
        self.animation.start()

        # 设置弹出框1秒弹出,然后渐隐
        self.remainTimer = QTimer()
        self.connect(self.remainTimer, signal("timeout()"), self,
                     signal.__slots__("closeAnimation()"))
        self.remainTimer.start(10000)  # 定时器10秒


# 关闭动画

    @pyqtSlot()
    def closeAnimation(self):
        # 清除Timer和信号槽
        self.remainTimer.stop()
        self.disconnect(self.remainTimer, signal("timeout()"), self,
                        signal.__slots__("closeAnimation()"))
        self.remainTimer.deleteLater()
        self.remainTimer = None
        # 弹出框渐隐
        self.animation = QPropertyAnimation(self, "windowOpacity")
        self.animation.setDuration(1000)
        self.animation.setStartValue(1)
        self.animation.setEndValue(0)
        self.animation.start()
        # 动画完成后清理
        self.connect(self.animation, signal("finished()"), self,
                     signal.__slots__("clearAll()"))

    # 清理及退出
    def clearAll(self):
        self.disconnect(self.animation, signal("finished()"), self,
                        signal.__slots__("clearAll()"))
        sys.exit()  # 退出
Ejemplo n.º 5
0
    def centerMultiScreen(self):
        mouse_pointer_position = QApplication.desktop().cursor().pos()
        screen = QApplication.desktop().screenNumber(mouse_pointer_position)
        print("current screen " + str(screen))

        self.window_one = QRect(QApplication.desktop().screenGeometry(0))
        self.window_two = QRect(QApplication.desktop().screenGeometry(1))

        if screen == 0:
            window_geometry = QRect(QApplication.desktop().screenGeometry(1))
            self.resize(window_geometry.width(), window_geometry.height())
            center_point = QApplication.desktop().screenGeometry(1).center()
            self.arrowsSet.height_k = (self.window_two.height() / self.window_one.height())
            self.arrowsSet.width_k = (self.window_two.width() / self.window_one.width())
        elif screen == 1:
            window_geometry = QRect(QApplication.desktop().screenGeometry(0))
            self.resize(window_geometry.width(), window_geometry.height())
            center_point = QApplication.desktop().screenGeometry(0).center()
            self.arrowsSet.height_k = (self.window_one.height() / self.window_two.height())
            self.arrowsSet.width_k = (self.window_one.width() / self.window_two.width())
        else:
            window_geometry = self.frameGeometry()
            center_point = QDesktopWidget.availableGeometry().center()
        window_geometry.moveCenter(center_point)
        self.move(window_geometry.topLeft())
Ejemplo n.º 6
0
    def render(self):
        app = QApplication(sys.argv)
        window = QMainWindow()
        window.setGeometry(400, 600, 400, 600)

        central_widget = QWidget()

        display_text = QTextEdit()
        display_text.setReadOnly(True)
        enter_text = QLineEdit()

        base_layout = QVBoxLayout()
        base_layout.addWidget(display_text)
        base_layout.addWidget(enter_text)

        central_widget.setLayout(base_layout)
        window.setCentralWidget(central_widget)

        dsk_widget = QDesktopWidget()
        geometry = dsk_widget.availableGeometry()
        center_position = geometry.center()
        frame_geometry = window.frameGeometry()
        frame_geometry.moveCenter(center_position)
        window.move(frame_geometry.topLeft())

        window.show()
        sys.exit(app.exec())
Ejemplo n.º 7
0
    def center(self):

        qr = self.frameGeometry()
        dw = QDesktopWidget()
        cp = dw.availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Ejemplo n.º 8
0
 def init_size(self):
     desktop = QDesktopWidget()
     size = desktop.availableGeometry().size()
     width = min(size.width()*0.8, 1280)
     height = min(size.height()*0.8, 720)
     size =QSize(width, height)
     size = self.settings.value("window_size", size)
     self.resize(size)
Ejemplo n.º 9
0
    def init_ui(self):

        # Установка заголовка и размеров главного окна
        self.setGeometry(400, 600, 400, 600)
        self.setWindowTitle('Messenger')

        self.login_button = QPushButton("Login", self)
        self.login_button.clicked.connect(self.click_login_button)
        self.login_button.setMaximumHeight(64)

        self.logout_button = QPushButton("Logout", self)
        self.logout_button.clicked.connect(self.click_logout_button)
        self.logout_button.setMaximumHeight(64)
        self.logout_button.hide()

        self.send_button = QPushButton("Send", self)
        self.send_button.clicked.connect(self.click_send_button)
        self.send_button.setMaximumHeight(64)
        self.send_button.hide()

        self.message_text = QTextEdit()
        self.message_text.setMaximumHeight(64)
        self.message_text.hide()

        self.message_list_label = QLabel("Messages:")

        self.message_list = QTextEdit()
        self.message_list.setReadOnly(True)

        user_label = QLabel(f'User: {self._username}')

        main_layout = QVBoxLayout()

        top_layout = QVBoxLayout()
        top_layout.addWidget(self.message_list_label)
        top_layout.addWidget(self.message_list)

        footer_layout = QHBoxLayout()
        footer_layout.addWidget(self.message_text)
        footer_layout.addWidget(self.send_button)

        main_layout.addWidget(user_label)
        main_layout.addWidget(self.login_button)
        main_layout.addWidget(self.logout_button)
        main_layout.addLayout(top_layout)
        main_layout.addLayout(footer_layout)

        central_widget = QWidget()
        central_widget.setLayout(main_layout)
        self.setCentralWidget(central_widget)

        dsk_widget = QDesktopWidget()
        geometry = dsk_widget.availableGeometry()
        center_position = geometry.center()
        frame_geometry = self.frameGeometry()
        frame_geometry.moveCenter(center_position)
        self.move(frame_geometry.topLeft())
Ejemplo n.º 10
0
 def _initUI(self):
     self.resize(QSize(500, 300))
     desktop = QDesktopWidget()
     desktop_with = desktop.availableGeometry().width()
     self.move(desktop_with - self.width(), 0)
     self._layout = pg.GraphicsLayout(border=(100, 100, 100))
     self._layout.setContentsMargins(10, 10, 10, 10)
     self._layout.setSpacing(0)
     self._layout.setBorder(color=(255, 255, 255, 255), width=0.8)
     self.setCentralItem(self._layout)
     self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowStaysOnTopHint)  # 无边框
     self.setWindowOpacity(0.5)
Ejemplo n.º 11
0
 def get_task_bar_position(self):
     desktop = QDesktopWidget()
     displayRect = desktop.screenGeometry()
     desktopRect = desktop.availableGeometry()
     if desktopRect.height() < displayRect.height():
         if desktopRect.y() > displayRect.y():
             return WINDOWS_TASKBAR_LOCATION.TOP
         else:
             return WINDOWS_TASKBAR_LOCATION.BOTTOM
     else:
         if desktopRect.x() > displayRect.x():
             return WINDOWS_TASKBAR_LOCATION.LEFT
         else:
             return WINDOWS_TASKBAR_LOCATION.RIGHT
Ejemplo n.º 12
0
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget
        @type QWidget
        """
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        screenSize = QRect()
        desktop = QDesktopWidget()
        screenSize = desktop.availableGeometry(self)

        aps_ratio = 83 / 100  # set prefer ratio if you want

        height = screenSize.height() * aps_ratio
        print('height', height, screenSize.width(), screenSize.height())
        self.setFixedSize(screenSize.width(), height)

        self.prevGraphicsView.setFrameShape(QFrame.NoFrame)
        self.currGraphicsView.setFrameShape(QFrame.NoFrame)

        self.prevImgPath = ''
        self.currImgPath = ''
        self.prevXMLPath = ''
        self.currXMLPath = ''
        self.prev_image_list = None

        self.prevScene = QGraphicsScene()
        self.prevGraphicsView.setScene(self.prevScene)
        self.currScene = QGraphicsScene()
        self.currGraphicsView.setScene(self.currScene)

        self.num_of_index = ' '
        self.curr_image_list = []
        self.prev_xml_list = []
        self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
        self.origin = QPoint()

        self.prev_count_mouse_click = None
        self.curr_count_mouse_click = None

        self.prevGraphicsView.mousePressEvent = self.prev_mouse_press
        self.prevGraphicsView.mouseMoveEvent = self.prev_mouse_move
        self.prevGraphicsView.mouseReleaseEvent = self.prev_mouse_release
        self.currGraphicsView.mousePressEvent = self.curr_mouse_press
        self.currGraphicsView.mouseMoveEvent = self.curr_mouse_move
        self.currGraphicsView.mouseReleaseEvent = self.curr_mouse_release

        self.overlay = Overlay()
Ejemplo n.º 13
0
def set_base_geometry(widget,
                      width,
                      height,
                      x=None,
                      y=None,
                      title=None,
                      fixed=False):

    if title:
        widget.setWindowTitle(title)

    # set window init size
    widget.resize(width, height)

    # set window resize constrains
    if fixed:
        widget.setFixedSize(width, height)
    else:
        widget.setMinimumSize(width, height)

    # set window init position
    if x is None and y is None:
        cp = QDesktopWidget()
        widget.move(
            cp.availableGeometry().center().x() - widget.width() * 0.5,
            cp.availableGeometry().center().y() - widget.height() * 0.5)
    elif x is None and y is not None:
        cp = QDesktopWidget()
        widget.move(cp.availableGeometry().center().x() - widget.width() * 0.5,
                    y)
    elif x is not None and y is None:
        cp = QDesktopWidget()
        widget.move(
            x,
            cp.availableGeometry().center().y() - widget.height() * 0.5)
    else:
        widget.move(x, y)
Ejemplo n.º 14
0
class BinaryClassifierViewer(QWidget):
    def __init__(self, title='PyQt5 3way classifier'):
        super().__init__()
        self.title = title
        self.desktop = QDesktopWidget()
        self.screen = self.desktop.availableGeometry()
        self.init_window()

    def init_window(self):
        self.setWindowTitle(self.title)
        self.init_widgets()

    def init_widgets(self):
        self.grid_root = QGridLayout()
        self.hbox_body = QHBoxLayout()
        self.hbox_foot = QHBoxLayout()
        self.setLayout(self.grid_root)

        self.label_head = QLabel(self)
        self.btn_false = QPushButton('< False', self)
        self.btn_true = QPushButton('True >', self)
        self.btn_up = QPushButton('Maybe^', self)
        self.label_status = QLabel(self)
        self.btn_confirm = QPushButton('Confirm', self)
        self.font_default = QFont()
        self.font_button = QFont()

        self.font_default.setBold(True)
        self.font_default.setPointSize(24)
        self.font_button.setPointSize(12)

        self.btn_false.setFont(self.font_default)
        self.btn_false.setStyleSheet('background-color : #ffa5a5')
        self.btn_true.setFont(self.font_default)
        self.btn_true.setStyleSheet('background-color: #c4ffc1')
        self.btn_up.setFont(self.font_default)
        self.btn_up.setStyleSheet('background-color: #feffa8')
        self.label_status.setFont(self.font_default)
        self.btn_confirm.setFont(self.font_button)

        self.grid_root.addWidget(self.label_head, 0, 0, Qt.AlignCenter)
        self.grid_root.addLayout(self.hbox_body, 1, 0)
        self.grid_root.addLayout(self.hbox_foot, 2, 0)
        self.hbox_body.addWidget(self.btn_false, Qt.AlignCenter)
        self.hbox_body.addWidget(self.btn_up, Qt.AlignCenter)
        self.hbox_body.addWidget(self.btn_true, Qt.AlignCenter)
        self.hbox_foot.addWidget(self.label_status, Qt.AlignLeft)
        self.hbox_foot.addWidget(self.btn_confirm, 0, Qt.AlignRight)
Ejemplo n.º 15
0
    def init_ui(self):

        app = QApplication(sys.argv)

        window = QMainWindow()
        # Установка заголовка и размеров главного окна
        window.setGeometry(400, 600, 400, 600)
        window.setWindowTitle('Messenger')

        self.send_button = QPushButton("Send", window)
        self.send_button.clicked.connect(self.click_send_button)
        self.send_button.setMaximumHeight(64)

        self.message_text = QTextEdit()
        self.message_text.setMaximumHeight(64)

        self.message_list_label = QLabel("Messages:")

        self.message_list = QTextEdit()
        self.message_list.setReadOnly(True)

        main_layout = QVBoxLayout()

        top_layout = QVBoxLayout()
        top_layout.addWidget(self.message_list_label)
        top_layout.addWidget(self.message_list)

        footer_layout = QHBoxLayout()
        footer_layout.addWidget(self.message_text)
        footer_layout.addWidget(self.send_button)

        main_layout.addLayout(top_layout)
        main_layout.addLayout(footer_layout)

        central_widget = QWidget()
        central_widget.setLayout(main_layout)
        window.setCentralWidget(central_widget)

        dsk_widget = QDesktopWidget()
        geometry = dsk_widget.availableGeometry()
        center_position = geometry.center()
        frame_geometry = window.frameGeometry()
        frame_geometry.moveCenter(center_position)
        window.move(frame_geometry.topLeft())

        window.show()
        sys.exit(app.exec_())
Ejemplo n.º 16
0
Archivo: scw.py Proyecto: jfitz/scw
def make_window(filename):
    desktop = QDesktopWidget()
    avail_geom = desktop.availableGeometry()
    desk_width = avail_geom.width()
    desk_height = avail_geom.height()
    print('desktop: ' + str(desk_height) + 'x' + str(desk_width))

    pixmap = QPixmap(filename)
    pixmap_height = pixmap.height()
    pixmap_width = pixmap.width()

    print('pixmap: ' + str(pixmap_height) + 'x' + str(pixmap_width))

    window = QWidget()
    layout = QVBoxLayout()

    label = QLabel()
    label.setPixmap(pixmap)
    scrollArea = QScrollArea()
    scrollArea.setBackgroundRole(QPalette.Dark)
    scrollArea.setWidget(label)
    layout.addWidget(scrollArea)

    layout.addWidget(QPushButton('Top'))
    layout.addWidget(QPushButton('Bottom'))

    window.setLayout(layout)

    window_height = window.height()
    window_width = window.width()

    window_top = int(desk_height * 0.1)
    window_left = int(desk_width * 0.1)

    print('window: ' + str(window_height) + 'x' + str(window_width))

    if pixmap_height > desk_height * 0.8:
        window_height = int(desk_height * 0.8)

    if pixmap_width > desk_width * 0.8:
        window_width = int(desk_width * 0.8)

    # window_height = int(pixmap_height * 0.9)
    # window_width = int(pixmap_width * 0.9)
    print('window: ' + str(window_height) + 'x' + str(window_width))

    window.setGeometry(window_left, window_top, window_width, window_height)
Ejemplo n.º 17
0
Archivo: scw.py Proyecto: jfitz/scw
    def initUI(self, filename):
        desktop = QDesktopWidget()
        avail_geom = desktop.availableGeometry()
        desk_width = avail_geom.width()
        desk_height = avail_geom.height()
        print('desktop: ' + str(desk_height) + 'x' + str(desk_width))

        pixmap = QPixmap(filename)
        pixmap_height = pixmap.height()
        pixmap_width = pixmap.width()

        print('pixmap: ' + str(pixmap_height) + 'x' + str(pixmap_width))

        label = QLabel()
        label.setPixmap(pixmap)
        scrollArea = QScrollArea()
        scrollArea.setBackgroundRole(QPalette.Dark)
        scrollArea.setWidget(label)

        self.setCentralWidget(scrollArea)

        self.statusBar().showMessage('Ready')

        window_height = self.height()
        window_width = self.width()

        window_top = int(desk_height * 0.1)
        window_left = int(desk_width * 0.1)

        print('window: ' + str(window_height) + 'x' + str(window_width))

        if pixmap_height > desk_height * 0.8:
            window_height = int(desk_height * 0.8)

        if pixmap_width > desk_width * 0.8:
            window_width = int(desk_width * 0.8)

        # window_height = int(pixmap_height * 0.9)
        # window_width = int(pixmap_width * 0.9)
        print('window: ' + str(window_height) + 'x' + str(window_width))

        self.setGeometry(window_left, window_top, window_width, window_height)

        # self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Statusbar')
        self.show()
Ejemplo n.º 18
0
    def _set_sys_attributes(self):
        """
        Set sys attributes like window titile.
        Disable OS-specific buttons.
        Remove borders.
        """

        self.setWindowFlags(Qt.FramelessWindowHint)

        self.setWindowTitle('Hospital Helper')
        dw = QDesktopWidget()
        w = min(1300, dw.geometry().size().width() * 0.75)
        self.setFixedSize(w, w * 0.6)
        qr = self.frameGeometry()
        cp = dw.availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Ejemplo n.º 19
0
    def _set_sys_attributes(self):
        """
        Set sys attributes like window title.
        Disable OS-specific buttons.
        Remove borders.
        """

        self.setWindowFlags(Qt.FramelessWindowHint)

        self.setWindowTitle('Hospital Helper')
        dw = QDesktopWidget()
        w = min(1300, dw.geometry().size().width() * 0.75)
        self.setFixedSize(w, w * 0.65)
        qr = self.frameGeometry()
        cp = dw.availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Ejemplo n.º 20
0
    def setup_geometry(self):
        """
        Setup geometry of the main window. It determines screen dimensions and a central point, then uses it to
        setup particular geometry.
        """

        # Determine screen dimensions and central point
        desktop = QDesktopWidget()
        screen_size = desktop.availableGeometry()
        center_point = screen_size.center()

        # Determine dimensions and subtract some pixels in order to the window will not out of bounds
        width = screen_size.width() - 100
        height = screen_size.height() - 100
        self.setGeometry(center_point.x() - width / 2,
                         center_point.y() - height / 2, width, height)

        # Setup minimal dimensions
        self.setMinimumHeight(600)
        self.setMinimumWidth(800)
Ejemplo n.º 21
0
    def _render(self):
        """Show GUI window."""
        app = QApplication(sys.argv)
        window = QMainWindow()
        window.setMinimumSize(400, 600)
        window.setWindowTitle('Python Messenger')

        central_widget = QWidget()

        self.display_text = QTextEdit()
        self.display_text.setReadOnly(True)
        self.enter_text = QTextEdit()
        self.send_button = QPushButton('Send', window)
        self.enter_text.setMaximumHeight(64)
        self.send_button.setMaximumHeight(64)

        base_layout = QVBoxLayout()
        top_layout = QHBoxLayout()
        footer_layout = QHBoxLayout()

        top_layout.addWidget(self.display_text)
        footer_layout.addWidget(self.enter_text)
        footer_layout.addWidget(self.send_button)

        base_layout.addLayout(top_layout)
        base_layout.addLayout(footer_layout)

        central_widget.setLayout(base_layout)
        window.setCentralWidget(central_widget)

        dsc_widget = QDesktopWidget()
        geometry = dsc_widget.availableGeometry()
        center_position = geometry.center()
        frame_geometry = window.frameGeometry()
        frame_geometry.moveCenter(center_position)
        window.move(frame_geometry.topLeft())

        self.send_button.clicked.connect(self._write)

        window.show()
        sys.exit(app.exec_())
Ejemplo n.º 22
0
    def render(self):
        app = QApplication(sys.argv)
        window = QMainWindow()
        window.setGeometry(400, 600, 400, 600)

        central_widget = QWidget()
        login_widget = QWidget()

        self.display_text = QTextEdit()
        self.display_text.setReadOnly(True)
        self.enter_text = QTextEdit()
        self.send_button = QPushButton('Send', window)
        self.enter_text.setMaximumHeight(64)
        self.send_button.setMaximumHeight(64)

        self.login = QTextEdit()
        self.password = QTextEdit()
        self.login_button = QPushButton('Login', login_window)
        self.register_button = QPushButton('Register', login_window)
        self.login.setMaximumHeight(64)
        self.password.setMaximumHeight(64)
        self.register_button.setMaximumHeight(64)
        self.login_button.setMaximumHeight(64)

        base_layout = QVBoxLayout()
        top_layout = QHBoxLayout()
        footer_layout = QHBoxLayout()

        login_top_layout = QVBoxLayout()
        login_footer_layout = QHBoxLayout()

        login_top_layout.addWidget(self.login)
        login_top_layout.addWidget(self.password)
        login_footer_layout.addWidget(self.login_button)
        login_footer_layout.addWidget(self.register_button_button)

        top_layout.addWidget(self.display_text)
        footer_layout.addWidget(self.enter_text)
        footer_layout.addWidget(self.send_button)

        base_layout.addLayout(top_layout)
        base_layout.addLayout(footer_layout)

        login_widget.setLayout(login_layout)
        login_window.setCentralWidget(login_widget)

        login_widget.show()

        central_widget.setLayout(base_layout)
        window.setCentralWidget(central_widget)

        dsk_widget = QDesktopWidget()
        geometry = dsk_widget.availableGeometry()
        center_position = geometry.center()
        frame_geometry = window.frameGeometry()
        frame_geometry.moveCenter(center_position)
        window.move(frame_geometry.topLeft())

        self.send_button.clicked.connect(self.write)

        # login_window.show()
        window.show()
        sys.exit(app.exec_())
Ejemplo n.º 23
0
Archivo: timon.py Proyecto: jpli/timon
 def position_to_bottom_right(self, margin=20):
     desktop = QDesktopWidget()
     ag = desktop.availableGeometry()
     x = ag.width() - self.width() - margin
     y = ag.height() - self.height() - margin
     self.move(x, y)
Ejemplo n.º 24
0
    def __init__(self, main_window, request: Request, icon_manager):
        """Constructor for the program

        Args:
            main_window: Potku window.
            request: Request class object.
            icon_manager: IconManager object.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_settings.ui", self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        screen_geometry = \
            QDesktopWidget.availableGeometry(QApplication.desktop())
        self.resize(int(self.geometry().width() * 1.2),
                    int(screen_geometry.size().height() * 0.8))

        self.main_window = main_window
        self.request = request
        self.icon_manager = icon_manager

        # Connect buttons.
        self.OKButton.clicked.connect(self.update_and_close_settings)
        self.applyButton.clicked.connect(self.__update_settings)
        self.cancelButton.clicked.connect(self.close)

        preset_folder = gutils.get_preset_dir(request.global_settings)
        # Add measurement settings view to the settings view
        self.measurement_settings_widget = MeasurementSettingsWidget(
            self.request.default_measurement, preset_folder=preset_folder)
        self.tabs.addTab(self.measurement_settings_widget, "Measurement")

        # Connect the enabling of the OKButton to a signal that indicates
        # whether beam selection is ok
        self.measurement_settings_widget.beam_selection_ok.connect(
            self.OKButton.setEnabled)

        # Add detector settings view to the settings view
        self.detector_settings_widget = DetectorSettingsWidget(
            self.request.default_detector,
            self.request,
            self.icon_manager,
            run=self.measurement_settings_widget.tmp_run)

        self.tabs.addTab(self.detector_settings_widget, "Detector")

        # Add simulation settings view to the settings view
        self.simulation_settings_widget = SimulationSettingsWidget(
            self.request.default_element_simulation,
            preset_folder=preset_folder)
        self.tabs.addTab(self.simulation_settings_widget, "Simulation")

        self.simulation_settings_widget.setEnabled(True)

        # Add profile settings view to the settings view
        self.profile_settings_widget = ProfileSettingsWidget(
            self.request.default_measurement, preset_folder=preset_folder)
        self.tabs.addTab(self.profile_settings_widget, "Profile")

        self.tabs.currentChanged.connect(self.__check_for_red)

        self.original_simulation_type = \
            self.request.default_element_simulation.simulation_type
Ejemplo n.º 25
0
class WindowNotify(QtWidgets.QMainWindow):

    SignalClosed = pyqtSignal()  # 弹窗关闭信号
    isShow=False
    showTime=datetime.datetime.now()
    notiStart=False

    def __init__(self, title="", content="", timeout=5000, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # self.setupUi(self)
        # self.setTitle(title).setContent(content)
        # self._timeout = timeout
        self.desktop = QDesktopWidget()
        self.resize(300, 300)
        self._init()
        self.move((self.desktop.availableGeometry().width() - self.width()), pyautogui.size()[1])
        self.label = QtWidgets.QLabel(self)
        # self.setWindowFlags(Qt.FramelessWindowHint)  # 去边框
        self.setAttribute(Qt.WA_TranslucentBackground)  # 设置窗口背景透明
        self.label.setGeometry(QtCore.QRect(0, 0, self.width(), self.height()))
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setStyleSheet("background:rgb(241,241,241);"
                                 "font:bold 20px Microsoft YaHei;"
                                 "border: 3px solid rgb(96,96,96);"
                                 "padding:12px")
        self.label.setText(content)
        # self.label.setPixmap(QtGui.QPixmap("C:/Users/Administrator/Desktop/background.png"))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")

        self.btn = QtWidgets.QPushButton('关闭',self)

        self.btn.setGeometry(QtCore.QRect(self.width() - 55, 5, 50, 25))
        # btn.setToolTip('这是按钮提示')
        # self.setStyleSheet("background-color: rgb(229,229,229);")
        # self.btn.set
        self.btn.setStyleSheet("QPushButton{\n"
                    "    background:rgba(206,0,0,0.5);\n"
                    "    box-shadow: -10px 2px 4px rgba(0,255,0,0.5);"
                          "border-radius: 12px;"
                    "}\n"
                    "QPushButton:hover{                    \n"
                    "    background:#FF2D2D;\n"
                    "}\n"
                    "QPushButton:pressed{\n"
                    "    border: 1px solid #3C3C3C!important;\n"
                    "    background:#AE0000;\n"
                    "}")
        self.btn.setObjectName("btn_close")
        self.btn.clicked.connect(self.onClose)
        # self.showAnimation()
        self.mSysTrayIcon = QSystemTrayIcon(self)
        icon = QIcon("h.png")
        self.mSysTrayIcon.setIcon(icon)

        self.sound_file = 'noti.wav'
        self.sound = PyQt5.QtMultimedia.QSoundEffect()  # t2 = threading.Thread(target=ischecked)
        self.sound.setSource(PyQt5.QtCore.QUrl.fromLocalFile(self.sound_file))  # t2.start()
        # self.sound.setLoopCount(PyQt5.QtMultimedia.QSoundEffect.)  # shownoti()
        self.sound.setVolume(0.1)

    def startNoti(self,settingButton):
        # print(settingButton.StartButton)
        if settingButton!=None:
            if self.notiStart==False:
                for i in range(0, len(noti_checkBox_list)):
                    noti_pre_time_list[i] = datetime.datetime.now()
                self.id = self.startTimer(1000)
                settingButton.setText('点击暂停')
                settingButton.setStyleSheet("background-color: rgb(255,177,178);"
                                       "border-radius:5px;"
                                       "height:30px;"
                                       "font:bold;"
                                       "border: 1px solid #000;")
                self.notiStart=True
            else:
                self.killTimer(self.id)
                settingButton.setText('点击开始')
                settingButton.setStyleSheet("background-color: rgb(177,255,218);"
                                            "border-radius:5px;"
                                            "height:30px;"
                                            "font:bold;"
                                            "border: 1px solid #000;")
                self.notiStart=False
    def timerEvent(self, evt):
        for i in range(0, len(noti_checkBox_list)):
                if noti_checkBox_list[i].isChecked():
                    dTime = datetime.datetime.now() - noti_pre_time_list[i]
                    if (int(dTime.total_seconds()) > int(noti_delayinput_list[i].text())) and self.isShow==False:
                        noti_pre_time_list[i] = datetime.datetime.now()
                        self.showTime= datetime.datetime.now()
                        self.showAnimation()
                        self.sound.play()
                        self.isShow=True
                        showTime = datetime.datetime.now()
                        self.label.setText(noti_contentinput_list[i].toPlainText())
                    elif self.isShow==True:
                        dTime=int((datetime.datetime.now()-self.showTime).total_seconds())
                        if dTime>3:
                            self.onClose()




    def m(self):
        self.hide()

        self.mSysTrayIcon.setToolTip("我在这里哦!")
        self.tray_menu = QMenu(QApplication.desktop())  # 创建菜单
        self.RestoreAction = QAction(u'还原 ', self, triggered=self.show_w)  # 添加一级菜单动作选项(还原主窗口)
        self.QuitAction = QAction(u'退出 ', self, triggered=self.onActivated)
        self.tray_menu.addAction(self.RestoreAction)  # 为菜单添加动作
        self.tray_menu.addAction(self.QuitAction)
        self.mSysTrayIcon.setContextMenu(self.tray_menu)
        self.mSysTrayIcon.activated.connect(self.onActivated)
        self.mSysTrayIcon.show()
    def show_w(self, reason):
        self.show()
        self.mSysTrayIcon.hide()

    def onActivated(self, reason):
        if reason == self.mSysTrayIcon.Trigger:
            self.show()
            # self.mSysTrayIcon.hide()
    def showAnimation(self):
        # 显示弹出框动画
        # print("open")
        self.isShow = True


        self.animation = QPropertyAnimation(self, b"pos")
        self.animation.setDuration(200)
        self.animation.setStartValue(QPoint(self.x(), self.y()))
        self.animation.setEndValue(QPoint((self.desktop.availableGeometry().width() - self.width()-5), (
                    self.desktop.availableGeometry().height() - self.height() )))
        self.animation.start()
        # 设置弹出框1秒弹出,然后渐隐
        self.remainTimer = QTimer()
        # self.connect(self.remainTimer, SIGNAL("timeout()"), self, SLOT("closeAnimation()"))
        self.remainTimer.start(10000)  # 定时器10秒

    @pyqtSlot()
    def closeAnimation(self):
        # 清除Timer和信号槽
        # self.remainTimer.stop()
        # # self.disconnect(self.remainTimer, SIGNAL("timeout()"), self, SLOT("closeAnimation()"))
        # self.remainTimer.deleteLater()
        # self.remainTimer = None
        # 弹出框渐隐
        # self.animation = QPropertyAnimation(self, b'windowOpacity')
        # self.animation.setDuration(1000)
        # self.animation.setStartValue(1)
        # self.animation.setEndValue(1)
        # self.animation.start()
        self.isShow = False
        self.animation = QPropertyAnimation(self, b"pos")
        self.animation.setDuration(200)

        self.animation.setStartValue(QPoint(self.x(), self.y()))
        self.animation.setEndValue(QPoint((self.desktop.availableGeometry().width() - self.width() - 5),  pyautogui.size()[1]))
        self.animation.start()
        # self.cl()
        # self.animation.finished.connect(QCoreApplication.instance().quit)
        # 动画完成后清理
        # self.connect(self.animation, SIGNAL("finished()"), self, SLOT("clearAll()"))

        # 清理及退出
    def cl(self):
        # QCoreApplication.instance().quit
        self.close()
        # sys.exit()
    @pyqtSlot()
    def clearAll(self):
        # self.disconnect(self.animation, SIGNAL("finished()"), self, SLOT("clearAll()"))
        sys.exit()  # 退出

    def onClose(self):
        #点击关闭按钮时
        # print("onClose")
        self.isShow = False
        QTimer.singleShot(100, self.closeAnimation)#启动弹回动画

    def _init(self):
        # 隐藏任务栏|去掉边框|顶层显示
        self.setWindowFlags(Qt.Tool | Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint )
Ejemplo n.º 26
0
class VideoAppViewer(QWidget):
    def __init__(self, title='PyQt5 video labeling viewer'):
        """init

        Arguments:
            QWidget {[type]} -- default qt widget

        Keyword Arguments:
            title {str} -- window title (default: {'PyQt5 video labeling viewer'})
        """

        super().__init__()
        self.logger = logging.getLogger(__name__)
        self.title = title
        self.desktop = QDesktopWidget()
        self.screen = self.desktop.availableGeometry()
        self.font_header = QFont()
        self.font_header.setBold(True)

        # init window - init and set default config about window
        self.setWindowTitle(self.title)

        # grid: root layout
        self.grid_root = QGridLayout()
        self.setLayout(self.grid_root)
        vbox_panels = QVBoxLayout()
        vbox_option = QVBoxLayout()
        self.grid_root.addLayout(vbox_panels, 0, 0)
        self.grid_root.addLayout(vbox_option, 0, 1)

        # vbox_panel/label_frame: show frame image
        self.label_frame = VideoFrameViewer(self)
        self.label_frame.setAlignment(Qt.AlignCenter)
        self.label_frame.setMouseTracking(True)
        vbox_panels.addWidget(self.label_frame)

        # vbox_panel/hbox_video: show process about video
        hbox_video_slider = QHBoxLayout()
        self.btn_play_video = QPushButton()
        self.btn_play_video.setEnabled(True)
        self.btn_play_video.setIcon(self.style().standardIcon(
            QStyle.SP_MediaPlay))
        self.slider_video = QSlider(Qt.Horizontal)
        self.slider_video.setRange(0, 0)
        hbox_video_slider.addWidget(self.btn_play_video)
        hbox_video_slider.addWidget(self.slider_video)
        vbox_panels.addLayout(hbox_video_slider)

        # vbox_panel/label_video_status: show frame index or exception msg
        self.label_video_status = QLabel()
        self.label_video_status.setAlignment(Qt.AlignCenter)
        vbox_panels.addWidget(self.label_video_status)

        # vbox_option/group_video_info: show video static info
        self.group_video_info = QGroupBox('Video Information')
        sub_grid = QGridLayout()
        label_path = self._get_header_label('Path')
        label_shape = self._get_header_label('Shape')
        label_fps = self._get_header_label('FPS')
        self.label_video_path = QLabel()
        self.label_video_path.setAlignment(Qt.AlignLeft)
        self.label_video_path.setWordWrap(True)
        self.label_video_shape = QLabel()
        self.label_video_shape.setAlignment(Qt.AlignLeft)
        self.label_video_fps = QLabel()
        self.label_video_fps.setAlignment(Qt.AlignLeft)
        sub_grid.addWidget(label_path, 0, 0)
        sub_grid.addWidget(self.label_video_path, 0, 1)
        sub_grid.addWidget(label_shape, 1, 0)
        sub_grid.addWidget(self.label_video_shape, 1, 1)
        sub_grid.addWidget(label_fps, 2, 0)
        sub_grid.addWidget(self.label_video_fps, 2, 1)
        self.group_video_info.setLayout(sub_grid)
        self.group_video_info.contentsMargins()
        self.group_video_info.setAlignment(Qt.AlignTop)
        vbox_option.addWidget(self.group_video_info)

        # vbox_option/table_preview_record: preview the summary of records
        self.table_preview_records = self._get_preview_table(self)
        vbox_option.addWidget(self.table_preview_records)

        # self.tree_preview_records = QTreeView()
        # self.tree_preview_records.setRootIsDecorated(False)
        # self.tree_preview_records.setAlternatingRowColors(True)
        # self.model_preview_records = self._get_preview_model(self)
        # self.tree_preview_records.setModel(self.model_preview_records)
        # self.tree_preview_records.setEditTriggers(QAbstractItemView.NoEditTriggers)
        # vbox_option.addWidget(self.tree_preview_records)

        # vbox_option/hbox_jump_records: jump to next or previous record
        hbox_jump_records = QHBoxLayout()
        self.btn_previous_record = QPushButton('<< Previous Record')
        self.btn_next_record = QPushButton('Next Record >>')
        hbox_jump_records.addWidget(self.btn_previous_record)
        hbox_jump_records.addWidget(self.btn_next_record)
        vbox_option.addLayout(hbox_jump_records)

        # vbox_option/btn_export: export records
        self.btn_export_records = QPushButton('Export')
        vbox_option.addWidget(self.btn_export_records)

    def _get_header_label(self, text: str = ''):
        label = QLabel(text)
        label.setFont(self.font_header)
        label.setAlignment(Qt.AlignLeft)
        return label

    def _get_preview_table(self, parent):
        table = QTableWidget(parent=parent)
        table.setColumnCount(4)
        table.setHorizontalHeaderLabels(['timestamp', 'frame', 'pt1', 'pt2'])
        table.setSortingEnabled(False)
        table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        table.setSelectionBehavior(QAbstractItemView.SelectRows)
        return table

    def add_record_to_preview(self, timestamp: str, frame_idx: int, pt1: tuple,
                              pt2: tuple):
        self.table_preview_records.insertRow(0)
        self.table_preview_records.setItem(0, 0, QTableWidgetItem(timestamp))
        self.table_preview_records.setItem(0, 1,
                                           QTableWidgetItem(str(frame_idx)))
        self.table_preview_records.setItem(0, 2, QTableWidgetItem(str(pt1)))
        self.table_preview_records.setItem(0, 3, QTableWidgetItem(str(pt2)))
        self.table_preview_records.sortByColumn(0, Qt.AscendingOrder)

    def remove_record_from_preview(self, row_idx: int):
        self.table_preview_records.removeRow(row_idx)
Ejemplo n.º 27
0
class KalmanFilterTracker(QWidget):
    def __init__(self, title='', image=''):
        super().__init__()
        self.title = title
        self.desktop = QDesktopWidget()
        self.screen = self.desktop.availableGeometry()
        self.logger = logging.getLogger(self.__class__.__name__)

        # drawing setting
        self._drawing = False
        self._image = image
        self._w, self._h, self._c = (1280, 720, 3)
        self._pen_measure = QPen(Qt.black, 3, cap=Qt.RoundCap)
        self._pen_measure_line = QPen(Qt.black, 1, style=Qt.SolidLine)
        self._pen_predict = QPen(Qt.blue, 3, cap=Qt.RoundCap)
        self._pen_predict_line = QPen(Qt.blue, 1, style=Qt.SolidLine)
        self._pen_correct = QPen(Qt.red, 5, cap=Qt.RoundCap)
        self._pen_correct_line = QPen(Qt.red, 1, style=Qt.SolidLine)
        self._measure_points = QPolygon()
        self._predict_points = QPolygon()
        self._correct_points = QPolygon()
        self._measure_text = f"Mouse measurement - ()"
        self._predict_text = f"Kalman Filter predict - ()"
        self._correct_text = f"Kalman Filter correct - ()"

        # init
        self.init_ui()

    def _ndarray_to_qimage(self, arr):
        w, h = arr.shape[:2]
        return QImage(arr.data, w, h, w * 3, QImage.Format_RGB888)

    def _qimage_to_qpixmap(self, qimg):
        return QPixmap.fromImage(qimg)

    def _reset_qpixmap(self):
        self._pixmap = self._qimage_to_qpixmap(self._image)

    def _reset_polygon(self):
        self._measure_points = QPolygon()
        self._correct_points = QPolygon()
        self._predict_points = QPolygon()

    def init_ui(self):
        # set windows
        self.setWindowTitle(self.title)
        self.resize(self._w, self._h)
        frame_geo = self.frameGeometry()
        frame_geo.moveCenter(self.screen.center())
        self.move(frame_geo.topLeft())

        # set layout
        self.root = QGridLayout()
        self._hbox_body = QHBoxLayout()
        self.setLayout(self.root)
        self.show()

        # set image
        if self._image:
            self._w, self.h = self._image.shape[:2]
        else:
            self._image = np.zeros((self._w, self._h, self._c),
                                   dtype='float32')
        self._image = self._ndarray_to_qimage(self._image)
        self._pixmap = self._qimage_to_qpixmap(self._image)

    def init_kalman_filter(self, x: float, y: float):
        dim_x = 4  # Number of state variables (x, y, x_velocity, y_velocity)
        dim_z = 2  # Number of of measurement inputs (x, y)
        self.kf = KalmanFilter(dim_x=dim_x, dim_z=dim_z)
        self.kf.x = np.array([x, y, 0., 0.
                              ])  # init state (position, velocity) (dim_x, 1)
        self.kf.F = np.array([
            [1., 0., 1., 0.],  # state transition matrix (dim_x, dim_x)
            [0., 1., 0., 1.],
            [0., 0., 1., 0.],
            [0., 0., 0., 1.]
        ])
        self.kf.H = np.array([
            [1., 0., 0., 0.],  # measurement function, ((dim_z, dim_x))
            [0., 1., 0., 0.]
        ])
        self.kf.P = np.eye(dim_x) * 1000.  # covariance matrix (dim_x, dim_x)
        self.kf.R = np.eye(
            dim_z) * 10.  # measurement noise covariance (dim_z, dim_z)
        self.kf.Q = np.eye(dim_x) * 1e-3  # process uncertainty  (dim_x, dim_x)

        self._predict_text = f"Kalman Filter predict - ()"
        self._correct_text = f"Kalman Filter correct - ()"

    def paintEvent(self, e):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        assert self._measure_points.count() == \
               self._predict_points.count() == \
               self._correct_points.count()
        for i in range(self._measure_points.count()):
            painter.setPen(self._pen_measure)
            painter.drawPoint(self._measure_points.point(i))
            painter.setPen(self._pen_predict)
            painter.drawPoint(self._predict_points.point(i))
            painter.setPen(self._pen_correct)
            painter.drawPoint(self._correct_points.point(i))
            if i:
                painter.setPen(self._pen_measure_line)
                painter.drawLine(self._measure_points.point(i - 1),
                                 self._measure_points.point(i))
                painter.setPen(self._pen_predict_line)
                painter.drawLine(self._predict_points.point(i - 1),
                                 self._predict_points.point(i))
                painter.setPen(self._pen_correct_line)
                painter.drawLine(self._correct_points.point(i - 1),
                                 self._correct_points.point(i))

            painter.setPen(self._pen_measure_line)
            painter.drawText(50, 60, self._measure_text)
            painter.setPen(self._pen_predict_line)
            painter.drawText(50, 80, self._predict_text)
            painter.setPen(self._pen_correct_line)
            painter.drawText(50, 100, self._correct_text)

    def mousePressEvent(self, e):
        if e.button() == Qt.LeftButton:
            self._drawing = True
            self.logger.info(f"========== Reset QPolygon ==========")
            x, y = float(e.x()), float(e.y())
            self._reset_polygon()
            self.init_kalman_filter(x, y)
            self._measure_text = f"Mouse measurement - ({e.x()}, {e.y()})"

    def mouseMoveEvent(self, e):
        if e.buttons() and Qt.LeftButton and self._drawing:
            self.logger.debug(f"Record {e.pos()}")

            # measurement
            self._measure_points << e.pos()
            self._measure_text = f"Mouse measurement - ({e.x()}, {e.y()})"

            # predict
            self.kf.predict()
            predict_pts = self.kf.x[:2]
            predict_x, predict_y = predict_pts
            predict_x, predict_y = int(predict_x), int(predict_y)
            self._predict_points << QPoint(predict_x, predict_y)
            self._predict_text = f"Kalman Filter predict - ({predict_pts[0]:.4f}, {predict_pts[1]:4f})"

            # correct
            self.kf.update(
                np.array([e.x(), e.y()], dtype='float32').reshape((2, 1)))
            correct_pts = self.kf.x[:2]
            correct_x, correct_y = correct_pts
            correct_x, correct_y = int(correct_x), int(correct_y)
            self._correct_points << QPoint(correct_x, correct_y)
            self._correct_text = f"Kalman Filter correct - ({correct_pts[0]:4f}, {correct_pts[1]:4f})"

            # draw
            self.logger.info(
                f"mouse ({e.x()}, {e.y()}); KF predict {predict_pts}; KF correct {correct_pts}"
            )
            self.update()

    def mouseReleaseEvent(self, e):
        if e.button() == Qt.LeftButton:
            self._drawing = False
Ejemplo n.º 28
0
    def initLayouts(self):
        self.spacer_1 = QSpacerItem(0, 0, QSizePolicy.Minimum,
                                    QSizePolicy.Expanding)
        self.spacer_2 = QSpacerItem(0, 0, QSizePolicy.Maximum,
                                    QSizePolicy.Expanding)
        self.mainLayout = QHBoxLayout()
        self.leftLayout = QVBoxLayout()
        self.leftTopLayout = QHBoxLayout()
        self.mainLayout.addLayout(self.leftLayout)
        self.leftLayout.addLayout(self.leftTopLayout)
        self.leftTopLayout.addWidget(self.calc)
        self.leftTopLayout.addItem(self.spacer_1)
        self.leftLayout.addItem(self.spacer_1)
        self.leftLayout.addItem(self.spacer_2)
        self.mainLayout.addWidget(self.dPage)
        self.setLayout(self.mainLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    a = QDesktopWidget()
    hw = a.availableGeometry()
    window_width = ((hw.getRect()[2]) * 0.95)
    window_height = ((hw.getRect()[3]) * 0.95)
    b = MainCalcWindow()
    b.show()
    b.setGeometry(0, 30, window_width, window_height)
    b.setFixedSize(window_width, window_height)
    app.exec_()
Ejemplo n.º 29
0
class CViewer(QWidget):
    def __init__(self, title='label classifier'):
        super().__init__()
        self.title = title
        self.desktop = QDesktopWidget()
        self.screen = self.desktop.availableGeometry()
        self.init_window()
        self.resize(WWIDTH, WHIGH)

    def init_window(self):
        self.setWindowTitle(self.title)
        self.init_widgets()

    def init_widgets(self):
        self.imW = WWIDTH // 2 - 1.5 * MARGIN
        self.imH = WHIGH - 3 * MARGIN
        LINE1 = MARGIN
        LINE2 = LINE1 * 2 + self.imW
        self.font_default = QFont("Monospace")
        self.font_default.setPointSize(14)
        self.font_default.setStyleHint(QFont.TypeWriter)

        self.font_2 = QFont("Monospace")
        self.font_2.setPointSize(12)
        self.font_2.setStyleHint(QFont.TypeWriter)

        self.font_3 = QFont("Monospace")
        self.font_3.setPointSize(72)
        self.font_3.setStyleHint(QFont.TypeWriter)
        self.font_3.setWeight(100)

        self.label_image = QLabel(self)

        self.label_image.setGeometry(
            QRect(LINE1, MARGIN * 2, MARGIN + self.imW, MARGIN + self.imH))
        self.label_image.setObjectName("label_image")

        self.red_mark = QLabel(self)
        self.red_mark.setFont(self.font_3)
        self.red_mark.setGeometry(
            QRect(LINE1 * 2, MARGIN * 2, WWIDTH - MARGIN, MARGIN + self.imH))
        self.red_mark.setStyleSheet("color: red;")

        self.label_selection_list = QLabel(self)
        self.label_selection_list.setFont(self.font_default)
        self.label_selection_list.setGeometry(QRect(LINE2, 30, 301, 311))
        self.label_selection_list.setObjectName("label_selection_list")

        self.label_status = QLabel(self)
        self.label_status.setGeometry(QRect(LINE1, 30, 800, 31))
        self.label_status.setObjectName("label_status")

        self.label = QLabel(self)
        self.label.setGeometry(QRect(LINE1, 380, 67, 17))
        self.label.setObjectName("label")

        self.Help_label = QLabel(self)
        self.Help_label.setFont(self.font_2)
        self.Help_label.setGeometry(QRect(LINE2, 420, 641, WHIGH - 420))
        self.Help_label.setTextFormat(Qt.PlainText)
        self.help_label_text = '0...9   select label ' \
                               '\n<<a.d>> previous/next item  ' \
                               '\nspace.. new unlabeled image' \
                               '\ns...... store'
        self.Help_label.setText(self.help_label_text)
        self.Help_label.setObjectName("Help_label")

        self.filter_list = QComboBox(self)
        self.filter_list.setGeometry(QRect(LINE2, 440, 420, 30))
        # self.filter_list.move(LINE2, 420)
        self.filter_list.keyPressEvent = self.keyPressEvent

        # button = QPushButton('S', self)
        # button.setToolTip('This is an example button')
        # button.move(LINE2 - 20, 420)
        # button.clicked.connect(self.on_click)

        self.show()