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)
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))
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()
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() # 退出
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())
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())
def center(self): qr = self.frameGeometry() dw = QDesktopWidget() cp = dw.availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft())
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)
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())
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)
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
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()
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)
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)
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_())
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)
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()
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())
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())
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)
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_())
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_())
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)
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
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 )
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)
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
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_()
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()