import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.progress_bar_status = None self.setup_ui() def setup_ui(self): self.setWindowTitle("Qt桌面应用程序") self.resize(300, 300) self.lcd_number = QLCDNumber(self) self.lcd_number.setDigitCount(3) self.lcd_number.move(10, 10) self.lcd_number.resize(100, 50) self.lcd_number.display(0) self.progress_bar = QProgressBar(self) self.progress_bar.setRange(0, 100) self.progress_bar.setFormat("当前 %v 总计 %m 百分比 %p %") self.progress_bar.setAlignment(Qt.AlignHCenter) def position_and_size(p_x, p_y, s_x, s_y): self.progress_bar.move(p_x, p_y) self.progress_bar.resize(s_x, s_y) position_and_size(10, 100, 200, 30) self.label = QLabel(self.progress_bar) self.label.hide() self.button = QPushButton(self) self.button.move(10, 150) self.button.setText("开始") self.button_2 = QPushButton(self) self.button_2.move(100, 150) self.button_2.setText("横/竖") def button_clicked(): if self.progress_bar_status is None or self.progress_bar_status == 3: self.progress_bar_status = 1 self.progress_start() self.button.setText("停止") elif self.progress_bar_status == 1: self.progress_bar_status = 2 self.timer.stop() self.button.setText("清除") elif self.progress_bar_status == 2: self.progress_bar_status = 3 self.progress_bar.reset() self.lcd_number.display(0) self.label.hide() self.button.setText("开始") self.button.clicked.connect(button_clicked) def button_2_clicked(): if self.progress_bar.orientation() != 2: self.progress_bar.setOrientation(Qt.Vertical) position_and_size(200, 50, 30, 200) self.label.show() else: self.progress_bar.setOrientation(Qt.Horizontal) position_and_size(10, 100, 200, 30) self.label.hide() self.button_2.clicked.connect(button_2_clicked) def progress_start(self): self.timer = QTimer(self.progress_bar) self.timer.start(500) def timer_time_out(): if self.progress_bar.value() <= self.progress_bar.maximum(): self.progress_bar.setValue(self.progress_bar.value() + 1) else: self.timer.stop() self.timer.timeout.connect(timer_time_out) def value_changed(value): if self.progress_bar.orientation() == 2: self.label.setText("\n".join(self.progress_bar.text().replace(" ", ""))) self.label.adjustSize() self.label.move(int((self.progress_bar.width() - self.label.width()) / 2), 0) self.progress_bar.setTextVisible(False) self.label.show() else: self.lcd_number.display(value) self.progress_bar.setTextVisible(True) self.progress_bar.valueChanged.connect(value_changed) if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())