class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setMinimumSize(QSize(1000, 500)) self.setWindowTitle("Yellow Circle") button = QPushButton('Draw', self) button.clicked.connect(self.draw) button.resize(100, 50) button.move(450, 400) self.line = QLine() def draw(self): button = self.sender() self.line = QLine(QPoint(), button.pos()) self.update() def paintEvent(self, event): QMainWindow.paintEvent(self, event) if not self.line.isNull(): painter = QPainter(self) pen = QPen(Qt.yellow, 3) painter.setPen(pen) painter.setBrush(QBrush(Qt.yellow, Qt.SolidPattern)) x, y = randint(0, 400), randint(0, 400) painter.drawEllipse(x, x, y, y)
class MainWindow(QMainWindow): def __init__(self): Window.InitUI(self) def draw(self): button = self.sender() self.line = QLine(QPoint(), button.pos()) self.update() def paintEvent(self, event): QMainWindow.paintEvent(self, event) if not self.line.isNull(): painter = QPainter(self) colors = [ Qt.black, Qt.blue, Qt.white, Qt.red, Qt.green, Qt.yellow, Qt.cyan ] color = choice(colors) pen = QPen(color, 3) painter.setPen(pen) painter.setBrush(QBrush(color, Qt.SolidPattern)) x, y = randint(0, 400), randint(0, 400) painter.drawEllipse(x, x, y, y)
class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.pushButton.clicked.connect(self.draw_line) self.line = QLine() def draw_line(self): button = self.sender() self.line = QLine(QPoint(), button.pos()) self.update() def paintEvent(self, event): QMainWindow.paintEvent(self, event) if not self.line.isNull(): painter = QPainter(self) painter.setBrush(QBrush(Qt.yellow, Qt.SolidPattern)) tt = random.randint(1, 5) for i in range(tt): a = random.randint(0, 200) b = random.randint(0, 200) b1 = random.randint(0, 200) painter.drawEllipse(b, b1, a, a)
class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.setMinimumSize(QSize(300, 300)) self.setMouseTracking(True) pybutton = QPushButton('button', self) pybutton.clicked.connect(self.draw_line) pybutton.resize(100, 100) pybutton.move(100, 100) self.line = QLine() def mouseMoveEvent(self, event): print('Mouse coords: ( %d : %d )' % (event.x(), event.y())) print(self.mapFromGlobal(QCursor.pos())) global x, y x, y = event.x(), event.y() def mousePressEvent(self, QMouseEvent): print(QMouseEvent.pos()) def draw_line(self): button = self.sender() self.line = QLine(QPoint(), button.pos()) self.update() def paintEvent(self, event): QMainWindow.paintEvent(self, event) if not self.line.isNull(): painter = QPainter(self) pen = QPen(Qt.red, 3) painter.setPen(pen) painter.drawLine(self.line) painter.drawEllipse(x, y, 10, 10)
class AboutDialog(QDialog): check_update = pyqtSignal(str, bool) def __init__(self, parent=None): super(AboutDialog, self).__init__(parent) self._ver = '' self._github = 'https://github.com/rachpt/lanzou-gui' self._api_url = 'https://github.com/zaxtyson/LanZouCloud-API' self._gitee = 'https://gitee.com/rachpt/lanzou-gui' self._home_page = 'https://rachpt.cn/lanzou-gui/' self.initUI() self.setStyleSheet(others_style) def set_values(self, version): self._ver = version self.lb_name_text.setText(f"{version} (点击检查更新)") # 更新版本 def show_update(self, ver, msg): self.lb_new_ver = QLabel("新版") # 检测新版 self.lb_new_ver_msg = QLabel() self.lb_new_ver_msg.setOpenExternalLinks(True) self.lb_new_ver_msg.setWordWrap(True) if ver != '0': self.lb_name_text.setText(f"{self._ver} ➡ {ver}") self.lb_new_ver_msg.setText(msg) self.lb_new_ver_msg.setMinimumWidth(700) if self.form.rowCount() < 5: self.form.insertRow(1, self.lb_new_ver, self.lb_new_ver_msg) def initUI(self): self.setWindowTitle("关于 lanzou-gui") about = f'本项目使用PyQt5实现图形界面,可以完成蓝奏云的大部分功能<br/> \ 得益于 <a href="{self._api_url}">API</a> 的功能,可以间接突破单文件最大 100MB 的限制,同时增加了批量上传/下载的功能<br/> \ Python 依赖见<a href="{self._github }/blob/master/requirements.txt">requirements.txt</a>,\ <a href="{self._github}/releases">releases</a> 有打包好了的 Windows 可执行程序,但可能不是最新的' project_url = f'<a href="{self._home_page}">主页</a> | <a href="{self._github}">repo</a> | \ <a href="{self._gitee}">mirror repo</a>' self.logo = QLabel() # logo self.logo.setPixmap(QPixmap("./src/logo2.gif")) self.logo.setStyleSheet("background-color:rgb(255,255,255);") self.logo.setAlignment(Qt.AlignCenter) self.lb_name = QLabel("版本") # 版本 self.lb_name_text = QPushButton("") # 版本 self.lb_name_text.setToolTip("点击检查更新") ver_style = "QPushButton {border:none; background:transparent;font-weight:bold;color:blue;}" self.lb_name_text.setStyleSheet(ver_style) self.lb_name_text.clicked.connect( lambda: self.check_update.emit(self._ver, True)) self.lb_about = QLabel("关于") # about self.lb_about_text = QLabel() self.lb_about_text.setText(about) self.lb_about_text.setOpenExternalLinks(True) self.lb_author = QLabel("作者") # author self.lb_author_mail = QLabel( "<a href='mailto:[email protected]'>rachpt</a>") self.lb_author_mail.setOpenExternalLinks(True) self.lb_update = QLabel("项目") # 更新 self.lb_update_url = QLabel(project_url) self.lb_update_url.setOpenExternalLinks(True) self.buttonBox = QDialogButtonBox() self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Close) self.buttonBox.button(QDialogButtonBox.Close).setText("关闭") self.buttonBox.rejected.connect(self.reject) self.buttonBox.setStyleSheet(btn_style) self.line = QLine(QPoint(), QPoint(550, 0)) self.lb_line = QLabel() self.lb_line.setText('<html><hr /></html>') vbox = QVBoxLayout() vbox.addWidget(self.logo) vbox.addStretch(1) self.form = QFormLayout() self.form.setLabelAlignment(Qt.AlignRight) self.form.setFormAlignment(Qt.AlignLeft) self.form.setHorizontalSpacing(40) self.form.setVerticalSpacing(15) self.form.addRow(self.lb_name, self.lb_name_text) self.form.addRow(self.lb_update, self.lb_update_url) self.form.addRow(self.lb_author, self.lb_author_mail) self.form.addRow(self.lb_about, self.lb_about_text) vbox.addLayout(self.form) vbox.addStretch(1) vbox.addWidget(self.lb_line) donate = QLabel() donate.setText("<b>捐助我</b> 如果你愿意") donate.setAlignment(Qt.AlignCenter) hbox = QHBoxLayout() hbox.addStretch(2) for it in ["wechat", "alipay", "qqpay"]: lb = QLabel() lb.setPixmap(QPixmap(f"./src/{it}.jpg")) hbox.addWidget(lb) hbox.addStretch(1) hbox.addWidget(self.buttonBox) vbox.addWidget(donate) vbox.addLayout(hbox) self.setLayout(vbox) self.setMinimumWidth(720) def paintEvent(self, event): QDialog.paintEvent(self, event) if not self.line.isNull(): painter = QPainter(self) pen = QPen(Qt.red, 3) painter.setPen(pen) painter.drawLine(self.line)