Слияние кода завершено, страница обновится автоматически
import time
from ui.main_ui import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QHeaderView, QTableWidgetItem, QWidget
from src.moviedl import moviedl
from PyQt5.QtCore import QObject, pyqtSignal
from threading import Thread
from ui.about import Ui_Dialog
# 修改ui文件后重新复发布py文件 : pyuic5 -o ./ui/main_ui.py ./ui/main_ui.ui
# 打包exe : pyinstaller -w -F -i icon.ico index.py
# 使用自定义信号去控制页面元素的修改
class MySignal(QObject):
btnChange = pyqtSignal(str) # 自定义信号
statusBarChange = pyqtSignal(str)
# 每一个窗口都是一个类文件
# 版本信息窗口
class DialogW(Ui_Dialog, QWidget):
def __init__(self):
super(DialogW, self).__init__()
self.setupUi(self)
# 主程序
class Main(Ui_MainWindow, QMainWindow):
def __init__(self):
super(Main, self).__init__()
self.setupUi(self)
self.ms = MySignal() # 实例化自定义信号
self.logic()
# 业务逻辑
def logic(self):
self.searchBtn.clicked.connect(self.search) # 监听点击事件
self.actionversion.triggered.connect(self.show_about)
self.ms.btnChange.connect(self.btn_text_change) # 监听自定义信号
self.ms.statusBarChange.connect(self.status_bar_text_change)
# 显示版本信息页面
def show_about(self):
# 控制显示, 必须是全局变量才能监听, 否则会闪退
dialog.show()
# QMessageBox.information(self, '关于', content, QMessageBox.Ok)
# 修改按钮文字
def btn_text_change(self, text):
self.searchBtn.setText(text)
# 修改状态文字
def status_bar_text_change(self, text):
self.statusbar.showMessage(text)
# 开始搜索
def search(self):
# 不在主线程中执行这个
keyword = self.movieName.text() # 获取关键字
self.ms.btnChange.emit('搜索中') # 发送自定义信号
self.ms.statusBarChange.emit(f"【{keyword}】 正在搜索中....")
# 使用多线程来防止阻塞,影响页面渲染
def t_run(key):
md = moviedl()
start = time.time()
data = md.run(key)
end = time.time()
total_time = '%.2f' % (end - start)
self.show_result(data)
self.ms.statusBarChange.emit(f"【{key}】 搜索完成, 共找到 {len(data)} 条数据, 总耗时 {total_time}s")
self.ms.btnChange.emit('开始搜索') # 发送自定义信号
task = Thread(target=t_run, args=(keyword,)) # 线程只有一个参数的时候也必须用元组的方式传递参数
task.start()
# 结果展示
def show_result(self, data):
self.searchRes.horizontalHeader().setSectionResizeMode(2, QHeaderView.Interactive)
self.searchRes.setRowCount(len(data))
row = 0
for i in data:
self.searchRes.setItem(row, 0, QTableWidgetItem(i['source']))
self.searchRes.setItem(row, 1, QTableWidgetItem(i['movie_name']))
self.searchRes.setItem(row, 2, QTableWidgetItem(i['movie_link']))
row += 1
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = Main() # 主窗口实例化
ui.show() # 主窗口展示
dialog = DialogW() # 子窗口只能全局实例化
sys.exit(app.exec_())
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )