class StuPage(QMainWindow): def __init__(self): super().__init__() self.initUI() self.show() def initUI(self): self.setGeometry(300, 300, 500, 500) # 左上角标语 self.headline = QLabel("学生列表", self) self.headline.setGeometry(10, 10, 100, 20) self.headline.setAlignment(Qt.AlignCenter) # 文字居中 # 显示课程列表 self.mg_lv = QListView(self) self.mg_lv.setGeometry(50, 150, 200, 200) slm = QStringListModel() # 创建mode rows = db.get_stus() self.tb = QTableView(self) self.tb.setGeometry(20, 50, 400, 300) model = QStandardItemModel(len(rows), 2) # 存储任意结构数据 model.setHorizontalHeaderLabels(['序号', '用户名']) for index, row in enumerate(rows): model.setItem(index, 0, QStandardItem(str(row['id']))) model.setItem(index, 1, QStandardItem(row['name'])) self.tb.setModel(model)
class CoursePage(QMainWindow): def __init__(self): super().__init__() self.initUI() self.show() def initUI(self): self.setGeometry(300, 300, 500, 500) # 左上角标语 self.headline = QLabel("选课情况", self) self.headline.setGeometry(10, 10, 100, 20) self.headline.setAlignment(Qt.AlignCenter) # 文字居中 # 显示课程列表 # self.mg_labels=QLabel("暂无资讯", self) self.mg_lv = QListView(self) self.mg_lv.setGeometry(50, 150, 200, 200) slm = QStringListModel() # 创建mode rows = db.get_courses() self.tb = QTableView(self) self.tb.setGeometry(20, 50, 400, 300) model = QStandardItemModel(len(rows), 4) # 存储任意结构数据 model.setHorizontalHeaderLabels(['序号', '课程', '教师', '学分']) for index, row in enumerate(rows): model.setItem(index, 0, QStandardItem(str(row['id']))) model.setItem(index, 1, QStandardItem(row['name'])) model.setItem(index, 2, QStandardItem(row['teacher'])) model.setItem(index, 3, QStandardItem(str(row['score']))) self.tb.setModel(model)
class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) # define system variables? self.cluster_list = [] self.machine_list = {} # Main window properties self.setWindowTitle("Machines monitor") self.setMinimumSize(QSize(900, 600)) # define Main window items # menu self.menu = self.menuBar() self.file_menu = self.menu.addMenu("File") # status bar self.status = self.statusBar() # buttons self.add_cluster_button = QPushButton("Add new cluster", self) # list of clusters self.cluster_list_view = QListView(self) self.init_ui() def init_ui(self): # set properties of Main Window items # set Exit QAction exit_action = QAction("Exit", self) exit_action.setShortcut(QKeySequence("Alt+Q")) exit_action.triggered.connect(self.close) # Menu - a little bit useless now self.file_menu.addAction(exit_action) # Status Bar - for results of reading configuration, saving, some error etc. self.status.showMessage("Application initialized") # PushButton for adding clusters self.add_cluster_button.setToolTip("Click to add new cluster") self.add_cluster_button.setGeometry(PyQt5.QtCore.QRect(310, 20, 100, 50))#move(100, 70) self.add_cluster_button.clicked.connect(self.add_cluster_click) # list for clusters self.cluster_list_view.setGeometry(PyQt5.QtCore.QRect(10, 20, 300, 300)) self.cluster_list_view.setModel(self.cluster_list) @pyqtSlot(name="add_cluster_click") def add_cluster_click(self): cluster_name, ok_pressed = QInputDialog.getText(self, "Get text", "Your name:", QLineEdit.Normal, "") if ok_pressed and cluster_name != "": worker.add_cluster(cluster_name, self.cluster_list)
class SettingWindow(QWidget): # on_addButtonClicked=pyqtSignal() # on_removeButtonClicked=pyqtSignal() # on_okButtonClicked=pyqtSignal() finished=pyqtSignal() def __init__(self): QWidget.__init__(self) self.listview=QListView(self) self.addButton=QPushButton(self) self.removeButton=QPushButton(self) self.resize(630,440) self.okButton=QPushButton(self) self.listview.setGeometry(30,30,410,351) self.addButton.setGeometry(490,40,80,22) self.addButton.setText("add") self.addButton.clicked.connect(self.click_add) self.removeButton.setGeometry(490,80,80,22) self.removeButton.setText("remove") self.removeButton.clicked.connect(self.click_remove) self.okButton.setGeometry(490,150,80,22) self.okButton.setText("ok") self.okButton.clicked.connect(self.click_ok) # self.aw=null self.fresh() def click_ok(self): self.finished.emit() self.close() def click_add(self): self.aw=AddWindow() self.aw.show() self.aw.okSig.connect(self.fresh) def click_remove(self): self.remove() def fresh(self): confFile=open("conf","r") self.listModel=QStandardItemModel() self.itemList=cPickle.load(confFile) confFile.close() for item in self.itemList: itemView=QStandardItem(QIcon(item.path),item.name) itemView.setEditable(False) self.listModel.appendRow(itemView) self.listview.setModel(self.listModel) def remove(self): index=self.listview.currentIndex().row() self.itemList.pop(index) self.listModel.removeRow(index) confFile=open("conf","w") cPickle.dump(self.itemList,confFile) confFile.close()
def initUI(self, file): list = QListView() list.setWindowTitle('Example List') list.setMinimumSize(600, 400) list.setGeometry(self.left, self.top + 50, self.width, self.height) model = QStandardItemModel(list) for f in file: item = QStandardItem(f) model.appendRow(item) list.setModel(model) list.show()
class Example(QWidget): def __init__(self): super().__init__() self.setGeometry(300, 300, 350, 200) self.setWindowTitle("Sorting") self.initData() self.initUI() def initData(self): names = ["Jack", "Tom", "Lucy", "Bill", "Jane"] self.model = QStringListModel(names) self.model = QStringListModel(names) self.filterModel = QSortFilterProxyModel(self) self.filterModel.setSourceModel(self.model) def initUI(self): sortB = QPushButton("Sort", self) sortB.move(250, 20) self.sortType = QCheckBox("Ascending", self) self.sortType.move(250, 60) sortB.clicked.connect(self.sortItems) self.lv = QListView(self) self.lv.setModel(self.filterModel) self.lv.setGeometry(20, 20, 200, 150) def sortItems(self): checked = self.sortType.isChecked() if checked: self.filterModel.sort(FIRST_COLUMN, Qt.AscendingOrder) else: self.filterModel.sort(FIRST_COLUMN, Qt.DescendingOrder)
class HomePage1(QMainWindow): def __init__(self): super().__init__() self.initUI() self.show() def initUI(self): self.setGeometry(300, 300, 500, 500) # self.setGeometry(shape) self.setWindowTitle('主页') # 左上角标语 self.headline = QLabel("信息管理系统", self) self.headline.setGeometry(10, 10, 100, 20) self.headline.setAlignment(Qt.AlignCenter) # 文字居中 # # 功能按钮 # 选课查询 self.bt1 = QPushButton("选课查询", self) self.bt1.setGeometry(20, 60, 100, 30) self.bt1.clicked.connect(self.course_click) # 个人信息 # self.bt1=QPushButton("个人信息",self) # self.bt1.setGeometry(120,60,100,30) # 显示资讯 # self.mg_labels=QLabel("暂无资讯", self) self.mg_lv = QListView(self) self.mg_lv.setGeometry(50, 150, 200, 200) slm = QStringListModel() # 创建mode rows = db.get_news() self.news_titles = list() self.news_contents = list() for row in rows: self.news_titles.append(row['title']) self.news_contents.append(row['content']) slm.setStringList(self.news_titles) # 将数据设置到model self.mg_lv.setModel(slm) self.mg_lv.clicked.connect(self.news_lv_click) def course_click(self): from pages.course import CoursePage self.coursepage = CoursePage() self.coursepage.show() def news_lv_click(self, qModelIndex): print(qModelIndex.row()) dialog = QDialog() dialog.setGeometry(400, 400, 300, 300) # dialog.adjustSize() # 随内容自动改变大小 # dialog.resize(200,200) text = QLabel(self.news_contents[qModelIndex.row()], dialog) # 添加空间显示提示文字 # text.resize(200,200) text.setGeometry(20, 20, 260, 260) text.setWordWrap(True) # 文本换行 # 设置窗口的属性为ApplicationModal模态,用户只有关闭弹窗后,才能关闭主界面 dialog.setWindowModality(Qt.ApplicationModal) dialog.exec_() # 阻塞执行,只调用show执行后立马销毁
class Ui_MainWindow(QMainWindow): def __init__(self): super().__init__() self.resize(1200, 650) self.setWindowTitle("测试工具") self.setWindowIcon(QIcon("./images/ico1.png")) self.setupMenubar() self.setupToolbar() self.setupUi() self.setupStatusbar() #菜单栏 def setupMenubar(self): self.menubar = self.menuBar() self.menu1 = self.menubar.addMenu("文件(F)") self.pub = QAction("pub", self) self.menu1.addAction(self.pub) self.dpan = QAction("D盘", self) self.menu1.addAction(self.dpan) self.menu1.addAction(QAction("退出(Q)", self)) self.menu2 = self.menubar.addMenu("编辑(E)") self.menu2.addAction(QAction("复制(C)", self)) self.menu3 = self.menubar.addMenu("工具(L)") self.ftp_sever = QAction("启动 Ftp-Server", self) self.menu3.addAction(self.ftp_sever) self.http_server = QAction("启动 Http-Server", self) self.menu3.addAction(self.http_server) self.mohe = QAction("魔盒刷机工具", self) self.menu3.addAction(self.mohe) self.timer = QAction("时间差计算器", self) self.menu3.addAction(self.timer) self.menu4 = self.menubar.addMenu("帮助(H)") self.usinghelp = QAction("使用文档(H)", self) self.menu4.addAction(self.usinghelp) self.menu4.addAction( QAction("关于工具(A)", self, triggered=lambda: QMessageBox.about( self, '关于', '@Version: 1.0.0\n@WJN\n@2019'))) self.menu4.addSeparator() self.command = QAction("命令大全", self) self.menu4.addAction(self.command) self.crt_script = QAction("Crt_脚本", self) self.menu4.addAction(self.crt_script) self.sh_script = QAction("Shell_脚本", self) self.menu4.addAction(self.sh_script) #工具栏 def setupToolbar(self): self.toolbar1 = self.addToolBar('') self.toolbar1.setIconSize(QtCore.QSize(30, 18)) self.new = QAction(QIcon("./images/shell.png"), "Adb常用命令", self) self.toolbar1.addAction(self.new) self.open = QAction(QIcon("./images/open.png"), "打开Cache目录", self) self.toolbar1.addAction(self.open) self.edit = QAction(QIcon("./images/edit.png"), "备忘录", self) self.toolbar1.addAction(self.edit) self.toolbar2 = self.addToolBar('') self.toolbar2.setIconSize(QtCore.QSize(30, 18)) self.toolbar2.addAction( QAction(QIcon("./images/android.png"), "系统监控", self)) self.toolbar2.addAction( QAction(QIcon("./images/cpu.png"), "监控CPU信息", self)) self.toolbar2.addAction( QAction(QIcon("./images/meminfo.png"), "监控内存PSS", self)) self.toolbar2.addAction( QAction(QIcon("./images/temperature.png"), "监控温度", self)) self.toolbar3 = self.addToolBar('') self.toolbar3.setIconSize(QtCore.QSize(30, 18)) self.toolbar3.addAction( QAction(QIcon("./images/newTask.png"), "NEW", self)) self.cmd = QAction(QIcon("./images/CMD.png"), "CMD", self) self.toolbar3.addAction(self.cmd) def setupUi(self): #中心widget self.centralwidget = QWidget(self) #self.centralwidget.setStyleSheet("background:red") self.setCentralWidget(self.centralwidget) #创建水平布局_2 self.hboxLayout_2 = QHBoxLayout(self.centralwidget) self.hboxLayout_2.setContentsMargins(1, 1, 1, 1) #创建分裂器 self.splitter = QSplitter(self.centralwidget) #self.splitter.setSizes([700,500]) self.splitter.setLineWidth(1) #外边距1 self.splitter.setOrientation(QtCore.Qt.Horizontal) #分裂器水平布局 self.splitter.setHandleWidth(0) #中间竖杠边距 #水平布局:分裂器 self.hboxLayout_2.addWidget(self.splitter) #分割器布局:Tabs self.tabs = QTabWidget(self.splitter) self.tab1Ui() #self.tab4Ui() self.tab2Ui() self.tab3Ui() #self.tab4Ui() #self.tab5Ui() #self.tab6Ui() #分割器布局:QWidget s self.widget = QWidget(self.splitter) #self.widget.setStyleSheet("background:blue") #创建竖直布局_1 self.vboxLayout = QVBoxLayout(self.widget) self.vboxLayout.setContentsMargins(0, 0, 0, 0) self.vboxLayout.setSpacing(1) #水平布局_1:按钮+弹簧 self.save_bt = QPushButton(self.centralwidget) self.save_bt.setText("保存") self.save_bt.setIcon(QIcon("./images/save.png")) self.clear_bt = QPushButton(self.centralwidget) self.clear_bt.setText("清空控制台") self.clear_bt.setIcon(QIcon("./images/clear.jpg")) self.hboxLayout_1 = QHBoxLayout() #水平布局 self.hboxLayout_1.setSpacing(1) #外边距1 spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) #弹簧 self.hboxLayout_1.addItem(spacerItem) self.hboxLayout_1.addWidget(self.clear_bt) self.hboxLayout_1.addWidget(self.save_bt) #将水平布局_1和文本框 添加到竖直布局_1 self.vboxLayout.addLayout(self.hboxLayout_1) self.textedit = QTextEdit(self.widget) self.textedit.setStyleSheet("background-color:#3c3f41;color:#ffffff") self.vboxLayout.addWidget(self.textedit) #向Splitter内添加控件后。设置的初始大小 self.splitter.setSizes([540, 660]) #self.setCentralWidget(self.centralwidget) def tab1Ui(self): self.tab1 = QWidget() self.tabs.addTab(self.tab1, "设备信息") groupbox_1 = QGroupBox(self.tab1) groupbox_1.setGeometry(QtCore.QRect(25, 20, 480, 190)) connect_lb = QLabel(self.tab1) connect_lb.setText('设备ip地址:') connect_lb.setGeometry(QtCore.QRect(50, 32, 150, 25)) self.connect_le = QLineEdit(self.tab1) self.connect_le.setText('192.168.1.100') self.connect_le.setStyleSheet("background-color:#ffffff;color:red") self.connect_le.setGeometry(QtCore.QRect(130, 32, 200, 25)) self.connect_bt = QPushButton(self.tab1) self.connect_bt.setText("连接..") self.connect_bt.setStyleSheet( '''QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}''' ) self.connect_bt.setGeometry(QtCore.QRect(370, 32, 100, 25)) #self.connect_bt.clicked.connect(self.connect_th) #groupbox_2 = QGroupBox(self.tab1) #groupbox_2.setTitle("") #groupbox_2.setGeometry(QtCore.QRect(25,70, 480,130)) self.info_bt = QPushButton(self.tab1) self.info_bt.setText("获取设备信息") self.info_bt.setGeometry(QtCore.QRect(50, 80, 100, 25)) self.md5_bt = QPushButton(self.tab1) self.md5_bt.setText("MD5查询工具") self.md5_bt.setGeometry(QtCore.QRect(50, 120, 100, 25)) self.asr_bt = QPushButton(self.tab1) self.asr_bt.setText("语音压测") self.asr_bt.setGeometry(QtCore.QRect(50, 160, 62, 25)) self.asr_txt_bt = QPushButton(self.tab1) self.asr_txt_bt.setText("语料") self.asr_txt_bt.setGeometry(QtCore.QRect(110, 160, 40, 25)) self.apk_bt = QPushButton(self.tab1) #self.logcat_bt.setIcon(QIcon("./images/open.png")) self.apk_bt.setText("APK信息") self.apk_bt.setGeometry(QtCore.QRect(215, 80, 100, 25)) self.clock_bt = QPushButton(self.tab1) self.clock_bt.setText("秒表") self.clock_bt.setGeometry(QtCore.QRect(215, 120, 100, 25)) self.log_viewpro_bt = QPushButton(self.tab1) self.log_viewpro_bt.setText("LogViewPro") self.log_viewpro_bt.setGeometry(QtCore.QRect(215, 160, 100, 25)) self.screenshot_bt = QPushButton(self.tab1) self.screenshot_bt.setText("截图") self.screenshot_bt.setGeometry(QtCore.QRect(370, 80, 100, 25)) self.ota_bt = QPushButton(self.tab1) self.ota_bt.setText("OTA上传工具") self.ota_bt.setGeometry(QtCore.QRect(370, 120, 100, 25)) self.test2_bt = QPushButton(self.tab1) self.test2_bt.setText("...") self.test2_bt.setGeometry(QtCore.QRect(370, 160, 100, 25)) #groupbox_3 = QGroupBox(self.tab1) #groupbox_3.setTitle("监控本机attached设备和串口") #groupbox_3.setGeometry(QtCore.QRect(25,250, 480,250)) com_lb = QLabel(self.tab1) com_lb.setText('监控本机attached设备和串口:') com_lb.setGeometry(QtCore.QRect(30, 250, 200, 25)) self.listview = QListView(self.tab1) self.listview.setGeometry(QtCore.QRect(25, 280, 480, 220)) self.stringlist = QtCore.QStringListModel() self.listview.setModel(self.stringlist) def tab2Ui(self): self.tab2 = QWidget() self.tabs.addTab(self.tab2, "冒烟测试") groupbox_1 = QGroupBox(self.tab2) groupbox_1.setTitle("SmokeTest") groupbox_1.setGeometry(QtCore.QRect(25, 50, 480, 300)) script_lb = QLabel(self.tab2) script_lb.setText('脚本路径:') script_lb.setGeometry(QtCore.QRect(50, 80, 150, 25)) self.script_bt = QPushButton(self.tab2) self.script_bt.setText("冒烟脚本路径..") self.script_bt.setGeometry(QtCore.QRect(150, 80, 100, 25)) self.script_bt.setStyleSheet("QPushButton{color:black}" "QPushButton:hover{color:red}" "QPushButton{background-color:lightgreen}" "QPushButton{border:2px}" "QPushButton{border-radius:10px}" "QPushButton{padding:2px 4px}") smoketest_lb = QLabel(self.tab2) smoketest_lb.setText('项目选择:') smoketest_lb.setGeometry(QtCore.QRect(50, 130, 150, 25)) infomation1 = ["请选择", "魔盒系列", "魔屏系列", "天猫精灵系列", "图兰朵系列"] self.infomation2 = ["请选择"] self.project_combox = QComboBox(self.tab2) self.project_combox.addItems(infomation1) self.project_combox.setGeometry(QtCore.QRect(150, 130, 200, 25)) smoketest_lb = QLabel(self.tab2) smoketest_lb.setText('型号选择:') smoketest_lb.setGeometry(QtCore.QRect(50, 180, 150, 25)) self.model_combox = QComboBox(self.tab2) self.model_combox.addItems(self.infomation2) self.model_combox.setGeometry(QtCore.QRect(150, 180, 200, 25)) self.smokestart_bt = QPushButton(self.tab2) self.smokestart_bt.setText("开始测试") self.smokestart_bt.setGeometry(QtCore.QRect(150, 250, 100, 25)) self.smokestop_bt = QPushButton(self.tab2) self.smokestop_bt.setText("取消测试") self.smokestop_bt.setGeometry(QtCore.QRect(250, 250, 100, 25)) def tab3Ui(self): self.aaaa = 1 self.tab3 = QWidget() self.tabs.addTab(self.tab3, "语音测试") groupbox_1 = QGroupBox(self.tab3) groupbox_1.setTitle("VoiceTest") groupbox_1.setGeometry(QtCore.QRect(25, 50, 480, 300)) self.textedit3 = QTextEdit(self.tab3) self.textedit3.setPlainText('杭州的天气\n声音大一点') self.textedit3.setStyleSheet("background-color:#ffcc00;color:#000000") self.textedit3.setGeometry(QtCore.QRect(63, 80, 400, 230)) self.open3_bt = QPushButton(self.tab3) self.open3_bt.setText("打开自定义语料") self.open3_bt.setGeometry(QtCore.QRect(63, 310, 100, 25)) self.save3_bt = QPushButton(self.tab3) self.save3_bt.setText("保存后生效") self.save3_bt.setGeometry(QtCore.QRect(363, 310, 100, 25)) self.asrtest_bt = QPushButton(self.tab3) self.asrtest_bt.setText("开始测试") self.asrtest_bt.setGeometry(QtCore.QRect(150, 400, 100, 25)) self.asrtest_bt.setEnabled(False) self.cancel3_bt = QPushButton(self.tab3) self.cancel3_bt.setText("取消测试") self.cancel3_bt.setGeometry(QtCore.QRect(250, 400, 100, 25)) self.asrreport_bt = QPushButton(self.tab3) self.asrreport_bt.setText("生成测试报告") self.asrreport_bt.setGeometry(QtCore.QRect(350, 400, 100, 25)) #groupbox_3 = QGroupBox(self.tab3) #groupbox_3.setTitle("测试说明") #groupbox_3.setGeometry(QtCore.QRect(50,350, 400,150)) def tab4Ui(self): self.tab4 = QWidget() self.tabs.addTab(self.tab4, "Linux系统") groupbox_1 = QGroupBox(self.tab4) groupbox_1.setGeometry(QtCore.QRect(25, 20, 480, 190)) self.info_bt = QPushButton(self.tab4) self.info_bt.setText("获取设备信息") self.info_bt.setGeometry(QtCore.QRect(50, 40, 100, 25)) self.info_bt = QPushButton(self.tab4) self.info_bt.setText("获取设备信息") self.info_bt.setGeometry(QtCore.QRect(50, 80, 100, 25)) self.md5_bt = QPushButton(self.tab4) self.md5_bt.setText("MD5查询工具") self.md5_bt.setGeometry(QtCore.QRect(50, 120, 100, 25)) self.asr_bt = QPushButton(self.tab4) self.asr_bt.setText("语音压测") self.asr_bt.setGeometry(QtCore.QRect(50, 160, 100, 25)) self.logcat_bt = QPushButton(self.tab4) self.logcat_bt.setText("抓取logcat") self.logcat_bt.setGeometry(QtCore.QRect(215, 40, 100, 25)) self.logcat_bt = QPushButton(self.tab4) self.logcat_bt.setText("抓取logcat") self.logcat_bt.setGeometry(QtCore.QRect(215, 80, 100, 25)) self.clock_bt = QPushButton(self.tab4) self.clock_bt.setText("秒表") self.clock_bt.setGeometry(QtCore.QRect(215, 120, 100, 25)) self.test_bt = QPushButton(self.tab4) self.test_bt.setText("...") self.test_bt.setGeometry(QtCore.QRect(215, 160, 100, 25)) self.screenshot_bt = QPushButton(self.tab4) self.screenshot_bt.setText("截图") self.screenshot_bt.setGeometry(QtCore.QRect(370, 40, 100, 25)) self.screenshot_bt = QPushButton(self.tab4) self.screenshot_bt.setText("截图") self.screenshot_bt.setGeometry(QtCore.QRect(370, 80, 100, 25)) self.ota_bt = QPushButton(self.tab4) self.ota_bt.setText("OTA上传工具") self.ota_bt.setGeometry(QtCore.QRect(370, 120, 100, 25)) self.test2_bt = QPushButton(self.tab4) self.test2_bt.setText("...") self.test2_bt.setGeometry(QtCore.QRect(370, 160, 100, 25)) def tab5Ui(self): self.tab_5 = QWidget() self.tabs.addTab(self.tab_5, "冒烟测试") def tab6Ui(self): self.tab_6 = QWidget() self.tabs.addTab(self.tab_6, "Test..") #状态栏 def setupStatusbar(self): self.statusBar().showMessage('Reday')
class Window(QWidget): def __init__(self, parent, jugadores, equipos): super().__init__() self.parent = parent self.__setUp(jugadores, equipos) def __setUp(self, jugadores, equipos): self.setGeometry(0, 30, 1366, 697) oImage = QImage("Assets/Fondo").scaled(1366, 697) # Ponemos el Background palette = QPalette() palette.setBrush(10, QBrush(oImage)) self.setPalette(palette) self.newfont = QFont("Copperplate Gothic Light", 12, QFont.Black) self.italicfont = QFont("Copperplate Gothic Light", 8) self.italicfont.setItalic(True) self.smallfont = QFont("Copperplate Gothic Light", 8) self.boton_equipo = QPushButton('Mi equipo', self) self.boton_equipo.setFont(self.newfont) self.boton_equipo.clicked.connect(self.ver_equipo) self.boton_equipo.setStyleSheet(boton_yeah) self.boton_equipo.setGeometry(613, 225, 140, 45) self.boton_campeonatos = QPushButton('Campeonatos', self) self.boton_campeonatos.setFont(self.newfont) self.boton_campeonatos.clicked.connect(self.campeonatos) self.boton_campeonatos.setStyleSheet(boton_yeah) self.boton_campeonatos.setGeometry(613, 300, 140, 45) self.show() self.boton_atras = QPushButton('Atrás', self) self.boton_atras.setFont(self.newfont) self.boton_atras.clicked.connect(self.atras) self.boton_atras.setStyleSheet(boton_yeah) self.boton_atras.setGeometry(1275, 1, 90, 40) self.__ptje = 60 self.cuadro_info = QLabel(self) self.booleanos = {'e': False, 'j': False, 'c': False, 'k': False} self.equipos = equipos self.lista_jugadores = [] for i in jugadores: self.lista_jugadores.append(Jugador(self, *i, scaled=0.8)) self.__jugadores = [QLabel(self) for i in range(11)] self.__jugadores_afuera = [ Jugador(self, x.id, x.nombre, x.nombre_completo, x.club, x.liga, x.nacionalidad, x.overall) for x in self.lista_jugadores if x not in self.__jugadores ] @property def listo(self): contador = 0 for i in self.__jugadores: if isinstance(i, Jugador): contador += 1 return contador >= 11 def ver_equipo(self): oImage = QImage("Assets/cancha_inferior").scaled( 1366, 697) # Ponemos el Background palette = QPalette() palette.setBrush(10, QBrush(oImage)) self.setPalette(palette) self.booleanos['e'] = True self.boton_atras.show() self.boton_campeonatos.hide() self.boton_equipo.hide() self.buscador_jugador = MyLineEdit('buscar jugador', self) self.buscador_jugador.setFont(self.italicfont) self.buscador_jugador.setGeometry(10, 535, 120, 25) self.buscador_jugador.show() self.boton_buscar = QPushButton('Buscar', self) self.boton_buscar.setFont(self.smallfont) self.boton_buscar.setStyleSheet(boton_yeah) self.boton_buscar.setGeometry(135, 525, 75, 40) self.boton_buscar.clicked.connect(self.buscar) self.boton_buscar.show() self.label_puntaje = QLabel(self) self.label_puntaje.setText(' Esperanza: ' + str(self.__ptje)) self.label_puntaje.setFont(self.newfont) self.label_puntaje.setStyleSheet(label_yeah) self.label_puntaje.setGeometry(1200, 520, 160, 40) self.label_puntaje.show() for i in self.__jugadores_afuera: i.create_layout() self.scroll_jugadores = Scroll(self.__jugadores_afuera, self) self.scroll_jugadores.move(0, 570) self.scroll_jugadores.show() self.reajustar_formacion() for i in self.__jugadores: i.en_cancha = True i.show() def buscar(self): lista = [] for i in self.__jugadores_afuera: if self.buscador_jugador.text() in i.nombre_completo: lista.append(i) if len(lista) > 0: self.scroll_jugadores.mostrar_busqueda(lista) def seleccion(self, jugador): self.cuadro_info.hide() if jugador.en_cancha: self.cuadro_info = CuadroInfo(self, jugador) self.cuadro_info.move(jugador.x, jugador.y) def reajustar_formacion(self): lista = list(self.__jugadores) if lista: self.cuadro_info.hide() lista[0].move(646, 450) lista.pop(0) for i in range(4): lista[0].move(205 + 300 * i, 350) lista.pop(0) for i in range(4): lista[0].move(195 + 310 * i, 210) lista.pop(0) for i in range(2): lista[0].move(520 + 220 * i, 70) lista.pop(0) def campeonatos(self): oImage = QImage("Assets/torneo").scaled(1366, 697) # Ponemos el Background palette = QPalette() palette.setBrush(10, QBrush(oImage)) self.setPalette(palette) self.booleanos['c'] = True self.boton_atras.show() self.boton_campeonatos.hide() self.boton_equipo.hide() self.label_equipos = QLabel(' Equipos', self) self.label_equipos.setGeometry(150, 50, 100, 30) self.label_equipos.setFont(self.newfont) self.label_equipos.setStyleSheet(label_yeah) self.label_equipos.show() self.label_resultados = QLabel(' Resultados', self) self.label_resultados.setGeometry(538, 50, 124, 30) self.label_resultados.setFont(self.newfont) self.label_resultados.setStyleSheet(label_yeah) self.label_resultados.show() self.label_respuestas = QLabel(' Respuestas', self) self.label_respuestas.setGeometry(988, 50, 124, 30) self.label_respuestas.setFont(self.newfont) self.label_respuestas.setStyleSheet(label_yeah) self.label_respuestas.show() self.boton_simular = QPushButton('Jugar', self) self.boton_simular.setStyleSheet(boton_yeah) self.boton_simular.setGeometry(350, 150, 100, 45) self.boton_simular.clicked.connect(self.simular) self.boton_simular.setFont(self.newfont) self.boton_simular.show() self.boton_random = QPushButton('Al azar', self) self.boton_random.setStyleSheet(boton_yeah) self.boton_random.setGeometry(350, 250, 100, 45) self.boton_random.clicked.connect(lambda: self.simular(True)) self.boton_random.setFont(self.newfont) self.boton_random.show() self.consulta_usuario = QPushButton('Datos usuario', self) self.consulta_usuario.setEnabled(False) self.consulta_usuario.setStyleSheet(mini_boton_yeah) self.consulta_usuario.setGeometry(760, 130, 100, 25) self.consulta_usuario.setFont(self.smallfont) self.consulta_usuario.clicked.connect(lambda: self.consulta(0)) self.consulta_usuario.show() self.consulta_ganadores = QPushButton('Ganadores', self) self.consulta_ganadores.setEnabled(False) self.consulta_ganadores.setStyleSheet(mini_boton_yeah) self.consulta_ganadores.setGeometry(760, 170, 100, 25) self.consulta_ganadores.clicked.connect(lambda: self.consulta(2)) self.consulta_ganadores.setFont(self.smallfont) self.consulta_ganadores.show() self.edit_equipo = MyLineEdit('Ingrese equipo', self) self.edit_equipo.setGeometry(715, 210, 100, 25) self.edit_equipo.setFont(self.italicfont) self.edit_equipo.show() self.consulta_equipo = QPushButton('Consultar', self) self.consulta_equipo.setEnabled(False) self.consulta_equipo.setStyleSheet(mini_boton_yeah) self.consulta_equipo.setGeometry(830, 210, 100, 25) self.consulta_equipo.setFont(self.smallfont) self.consulta_equipo.clicked.connect(lambda: self.consulta(1)) self.consulta_equipo.show() self.edit_fase = MyLineEdit('Ingrese fase', self) self.edit_fase.setGeometry(715, 250, 100, 25) self.edit_fase.setFont(self.italicfont) self.edit_fase.show() self.consulta_fase = QPushButton('Consultar', self) self.consulta_fase.setEnabled(False) self.consulta_fase.setStyleSheet(mini_boton_yeah) self.consulta_fase.setGeometry(830, 250, 100, 25) self.consulta_fase.setFont(self.smallfont) self.consulta_fase.clicked.connect(lambda: self.consulta(4)) self.consulta_fase.show() self.edit_partido = MyLineEdit('id partido', self) self.edit_partido.setGeometry(715, 290, 100, 25) self.edit_partido.setFont(self.italicfont) self.edit_partido.show() self.consulta_partido = QPushButton('Consultar', self) self.consulta_partido.setEnabled(False) self.consulta_partido.setStyleSheet(mini_boton_yeah) self.consulta_partido.setGeometry(830, 290, 100, 25) self.consulta_partido.setFont(self.smallfont) self.consulta_partido.clicked.connect(lambda: self.consulta(3)) self.consulta_partido.show() self.resultados = QListView(self) self.resultados.setGeometry(500, 100, 200, 450) self.items_resultado = [] self.model_resultados = QStandardItemModel(self.resultados) self.resultados.show() self.respuestas = QListView(self) self.respuestas.setGeometry(950, 100, 200, 450) self.items_respuestas = [] self.model_respuestas = QStandardItemModel(self.respuestas) self.respuestas.show() self.view = QListView(self) self.view.setGeometry(100, 100, 200, 450) model = QStandardItemModel(self.view) item = QStandardItem('Tu equipo, ' + str(self.__ptje)) item.setCheckable(True) item.setEditable(False) model.appendRow(item) self.items = [item] for i in self.equipos: item = QStandardItem(i[0] + ', ' + str(i[1])) item.setCheckable(True) item.setEditable(False) model.appendRow(item) self.items.append(item) self.view.setModel(model) self.view.show() self.edits = [self.edit_equipo, self.edit_partido, self.edit_fase] self.botones = [ self.consulta_partido, self.consulta_fase, self.consulta_usuario, self.consulta_equipo, self.consulta_ganadores ] def consulta(self, i): consultas = [ self.parent.consulta_usuario, lambda: self.parent.consulta_equipo(self.edit_equipo.text()), self.parent.consulta_ganadores, lambda: self.parent.consulta_partido(self.edit_partido.text()), lambda: self.parent.consulta_fase(self.edit_fase.text()) ] consultas[i]() def simular(self, random=False): if not random: equipos = [] for i in self.items: if i.checkState() == 2: equipos.append(i.text().split(',')) else: equipos = [x.text().split(',') for x in sample(self.items, 16)] if len(equipos) == 16: self.parent.simular_campeonato(equipos) for i in self.botones: i.setEnabled(True) def atras(self): oImage = QImage("Assets/fondo").scaled(1366, 697) palette = QPalette() palette.setBrush(10, QBrush(oImage)) self.setPalette(palette) self.boton_equipo.show() self.boton_campeonatos.show() self.boton_atras.hide() if self.booleanos['e']: self.label_puntaje.hide() self.scroll_jugadores.hide() for i in self.__jugadores: i.hide() self.buscador_jugador.hide() self.boton_buscar.hide() elif self.booleanos['c']: self.view.hide() self.boton_simular.hide() for i in self.edits: i.hide() for i in self.botones: i.hide() self.resultados.hide() self.respuestas.hide() self.boton_random.hide() self.label_respuestas.hide() self.label_resultados.hide() self.label_equipos.hide() for x in self.booleanos: self.booleanos[x] = False def cambio(self, x): self.booleanos['k'] = True self.jugador_cambiando = Jugador(self, x.id, x.nombre, x.nombre_completo, x.club, x.liga, x.nacionalidad, x.overall) self.jugador_seleccionado = x self.cuadro_info.hide() def intercambio(self, j2, cancha=False): i = self.__jugadores.index(self.jugador_seleccionado) self.booleanos['k'] = False if not cancha: self.scroll_jugadores.intercambio(j2, self.jugador_cambiando) self.__jugadores[i] = next(x for x in self.lista_jugadores if x.nombre == j2.nombre) self.reajustar_formacion() self.__jugadores[i].show() self.__jugadores[i].en_cancha = True self.jugador_seleccionado.hide() self.jugador_seleccionado.en_cancha = False j1 = self.jugador_seleccionado j3 = next(x for x in self.__jugadores_afuera if x.id == j2.id) self.__jugadores_afuera[self.__jugadores_afuera.index( j3)] = Jugador(self, j1.id, j1.nombre, j1.nombre_completo, j1.club, j1.liga, j1.nacionalidad, j1.overall) else: j = self.__jugadores.index(j2) self.__jugadores[i] = j2 self.__jugadores[j] = self.jugador_seleccionado self.reajustar_formacion() self.parent.cambio_jugador(self.jugador_seleccionado.nombre_completo, j2.nombre_completo, cancha) def mousePressEvent(self, event): self.cuadro_info.hide() self.booleanos['k'] = False if self.booleanos['e']: self.buscador_jugador.reset() if self.booleanos['c']: for i in self.edits: i.reset() def keyPressEvent(self, key): if self.booleanos['e'] and key.key() == Qt.Key_Return: self.boton_buscar.click() def agregar_jugador(self, jugador): for i in self.__jugadores: if not isinstance(i, Jugador): j = self.__jugadores.index(i) self.__jugadores[j] = (next(x for x in self.lista_jugadores if x.nombre == jugador.nombre)) self.reajustar_formacion() self.__jugadores[j].show() self.__jugadores[j].en_cancha = True self.scroll_jugadores.intercambio(jugador) self.parent.entra_jugador(jugador.nombre_completo) break @property def puntaje(self): return self.__ptje @puntaje.setter def puntaje(self, value): self.__ptje = value self.label_puntaje.setText(' Esperanza :' + str(value)) ### funciones para ser utilizadas por alumnos def cambiar_esperanza( self, valor ): # decidí hacerlo una función, ya que es más fácil darles una función que explicar que lo deben usar como propiedad. self.puntaje = valor def agregar_resultado(self, resultado): item = QStandardItem(resultado) item.setEditable(False) self.model_resultados.appendRow(item) self.items_resultado.append(item) self.resultados.setModel(self.model_resultados) def agregar_respuesta(self, respuesta): item = QStandardItem(respuesta) item.setEditable(False) self.model_respuestas.appendRow(item) self.items_respuestas.append(item) self.respuestas.setModel(self.model_respuestas) def resetear_resultados(self): self.resultados.hide() self.resultados = QListView(self) self.resultados.setGeometry(500, 100, 200, 450) self.items_resultado = [] self.model_resultados = QStandardItemModel(self.resultados) self.resultados.show() for i in self.botones: i.setEnabled(False) def resetear_respuestas(self): self.respuestas.hide() self.respuestas = QListView(self) self.respuestas.setGeometry(950, 100, 200, 450) self.items_respuestas = [] self.model_respuestas = QStandardItemModel(self.respuestas) self.respuestas.show()
class CtrlUserWidget(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent=parent) self.model = UsersListModel() self.model.update(db.load_users()) self.setModal(True) self.setWindowTitle('Users') self.initUI() def initUI(self): self.addBtn = QPushButton('Add user') self.addBtn.setIcon(QIcon('res/img/icons/plus_32.png')) self.editBtn = QPushButton('Edit user') self.editBtn.setIcon(QIcon('res/img/icons/edit_32.png')) self.editBtn.setDisabled(True) self.delBtn = QPushButton('Delete user') self.delBtn.setIcon(QIcon('res/img/icons/minus_32.png')) self.userView = QListView() self.userView.setEditTriggers(QAbstractItemView.NoEditTriggers) self.userView.setGeometry(0, 0, 100, 400) self.userView.setModel(self.model) self.buttons = QDialogButtonBox(QDialogButtonBox.Save, Qt.Horizontal, self) self.buttons.accepted.connect(self.accept) self.addBtn.clicked.connect(self.addUser) self.delBtn.clicked.connect(self.deleteUser) self.userView.doubleClicked.connect(self.activate_user) btnLayout = QVBoxLayout() btnLayout.addWidget(self.addBtn) btnLayout.addWidget(self.editBtn) btnLayout.addWidget(self.delBtn) upLayout = QHBoxLayout() upLayout.addWidget(self.userView) upLayout.addLayout(btnLayout) mainLayout = QVBoxLayout(self) mainLayout.addLayout(upLayout) mainLayout.addWidget(self.buttons) def showWidget(self, parent=None): dialog = CtrlUserWidget(parent) ok = dialog.exec_() return ok def addUser(self): dialog = AddUserDialog.getUser() if dialog: self.model.update(db.load_users()) self.model.layoutChanged.emit() self._update_view() return True def _update_view(self): self.userView.setModel(self.model) def deleteUser(self): indexes = self.userView.selectedIndexes() if indexes: # Indexes is a list of a single item in single-select mode. index = indexes[0] # Remove the item and refresh. db_response = db.del_user(self.model.data[index.row()][0]) if db_response: del self.model.data[index.row()] self.model.layoutChanged.emit() # Clear the selection (as it is no longer valid). self.userView.clearSelection() else: QMessageBox.warning( self, 'User is active', 'User is active. Change active User before delete', QMessageBox.Ok) def activate_user(self): indexes = self.userView.selectedIndexes() if indexes: # Indexes is a list of a single item in single-select mode. index = indexes[0] # Remove the item and refresh. db.set_active_user(self.model.data[index.row()][0]) self.model.update(db.load_users()) self.model.layoutChanged.emit() return True
class UiMainClientWindow(object): """ Класс, создающий интерфейс главного окна. """ def __init__(self, main_client_window): main_client_window.setObjectName("MainClientWindow") main_client_window.resize(756, 534) main_client_window.setMinimumSize(QSize(756, 534)) self.centralwidget = QWidget(main_client_window) self.centralwidget.setObjectName("centralwidget") self.label_contacts = QLabel(self.centralwidget) self.label_contacts.setGeometry(QRect(10, 0, 101, 16)) self.label_contacts.setObjectName("label_contacts") self.btn_add_contact = QPushButton(self.centralwidget) self.btn_add_contact.setGeometry(QRect(10, 450, 121, 31)) self.btn_add_contact.setObjectName("btn_add_contact") self.btn_remove_contact = QPushButton(self.centralwidget) self.btn_remove_contact.setGeometry(QRect(140, 450, 121, 31)) self.btn_remove_contact.setObjectName("btn_remove_contact") self.label_history = QLabel(self.centralwidget) self.label_history.setGeometry(QRect(300, 0, 391, 21)) self.label_history.setObjectName("label_history") self.text_message = QTextEdit(self.centralwidget) self.text_message.setGeometry(QRect(300, 360, 441, 71)) self.text_message.setObjectName("text_message") self.label_new_message = QLabel(self.centralwidget) self.label_new_message.setGeometry(QRect(300, 270, 450, 76)) self.label_new_message.setObjectName("label_new_message") self.text_menu = QMenuBar(self.label_new_message) self.text_menu.move(0, 51) self.action_bold = QAction(QIcon(os.path.join(STATIC, 'img/b.jpg')), 'Bold', self.text_message) self.action_italic = QAction(QIcon(os.path.join(STATIC, 'img/i.jpg')), 'Italic', self.text_message) self.action_underlined = QAction( QIcon(os.path.join(STATIC, 'img/u.jpg')), 'Underlined', self.text_message) self.action_smile = QAction( QIcon(os.path.join(STATIC, 'img/smile.gif')), 'smile', self.text_message) self.list_contacts = QListView(self.centralwidget) self.list_contacts.setGeometry(QRect(10, 20, 251, 411)) self.list_contacts.setObjectName("list_contacts") self.list_messages = QListView(self.centralwidget) self.list_messages.setGeometry(QRect(300, 20, 441, 271)) self.list_messages.setObjectName("list_messages") self.btn_send = QPushButton(self.centralwidget) self.btn_send.setGeometry(QRect(610, 450, 131, 31)) self.btn_send.setObjectName("btn_send") self.btn_clear = QPushButton(self.centralwidget) self.btn_clear.setGeometry(QRect(460, 450, 131, 31)) self.btn_clear.setObjectName("btn_clear") main_client_window.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(main_client_window) self.menubar.setGeometry(QRect(0, 0, 756, 21)) self.menubar.setObjectName("menubar") self.menu_file = QMenu(self.menubar) self.menu_file.setObjectName("file") self.menu_contacts = QMenu(self.menubar) self.menu_contacts.setObjectName("contacts") self.menu_profile = QMenu(self.menubar) self.menu_profile.setObjectName("profile") main_client_window.setMenuBar(self.menubar) self.statusBar = QStatusBar(main_client_window) self.statusBar.setObjectName("statusBar") main_client_window.setStatusBar(self.statusBar) self.menu_exit = QAction(main_client_window) self.menu_exit.setObjectName("menu_exit") self.menu_add_contact = QAction(main_client_window) self.menu_add_contact.setObjectName("menu_add_contact") self.menu_del_contact = QAction(main_client_window) self.menu_del_contact.setObjectName("menu_del_contact") self.menu_file.addAction(self.menu_exit) self.menu_contacts.addAction(self.menu_add_contact) self.menu_contacts.addAction(self.menu_del_contact) self.menu_contacts.addSeparator() self.menu_profile_avatar = QAction(main_client_window) self.menu_profile_avatar.setObjectName("menu_profile_avatar") self.menu_profile.addAction(self.menu_profile_avatar) self.menu_profile.addSeparator() self.menubar.addAction(self.menu_file.menuAction()) self.menubar.addAction(self.menu_contacts.menuAction()) self.menubar.addAction(self.menu_profile.menuAction()) self.retranslate_ui(main_client_window) self.btn_clear.clicked.connect(self.text_message.clear) QMetaObject.connectSlotsByName(main_client_window) def retranslate_ui(self, main_client_window): _translate = QCoreApplication.translate main_client_window.setWindowTitle( _translate("MainClientWindow", "SPELL Messenger - Client")) self.label_contacts.setText( _translate("MainClientWindow", "Список контактов:")) self.btn_add_contact.setText( _translate("MainClientWindow", "Добавить контакт")) self.btn_remove_contact.setText( _translate("MainClientWindow", "Удалить контакт")) self.label_history.setText( _translate("MainClientWindow", "История сообщений:")) self.label_new_message.setText( _translate("MainClientWindow", "Введите новое сообщение:")) self.btn_send.setText( _translate("MainClientWindow", "Отправить сообщение")) self.btn_clear.setText(_translate("MainClientWindow", "Очистить поле")) self.menu_file.setTitle(_translate("MainClientWindow", "Файл")) self.menu_contacts.setTitle(_translate("MainClientWindow", "Контакты")) self.menu_profile.setTitle(_translate("MainClientWindow", "Профиль")) self.menu_exit.setText(_translate("MainClientWindow", "Выход")) self.menu_profile_avatar.setText( _translate("MainClientWindow", "Аватар")) self.menu_add_contact.setText( _translate("MainClientWindow", "Добавить контакт")) self.menu_del_contact.setText( _translate("MainClientWindow", "Удалить контакт"))
class App(QDialog): list = None model = None modelList = None basePath = None targetPath = None videoPlayerLeft = None videoPlayerFront = None videoPlayerRight = None videoPlayerBack = None textboxLeft = None textboxFront = None textboxBack = None textboxRight = None dumpFileProcessing = False enablePlayAll = False def __init__(self): super().__init__() self.title = 'Tesla Footage Analyzer' self.left = 10 self.top = 60 self.width = 1920 self.height = 1080 self.initUI() def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.createGridLayout() windowLayout = QVBoxLayout() windowLayout.addWidget(self.horizontalGroupBox) self.setLayout(windowLayout) self.show() def createGridLayout(self): self.horizontalGroupBox = QGroupBox("Path: ") layout = QGridLayout() self.videoPlayerLeft = Player() self.videoPlayerLeft.resize(640, 480) self.videoPlayerLeft.show() self.videoPlayerFront = Player() self.videoPlayerFront.resize(640, 480) self.videoPlayerFront.show() self.videoPlayerRight = Player() self.videoPlayerRight.resize(640, 480) self.videoPlayerRight.show() self.videoPlayerBack = Player() self.videoPlayerBack.resize(640, 480) self.videoPlayerBack.show() self.textboxLeft = QLineEdit(self) self.textboxLeft.resize(280, 40) self.textboxFront = QLineEdit(self) self.textboxFront.resize(280, 40) self.textboxBack = QLineEdit(self) self.textboxBack.resize(280, 40) self.textboxRight = QLineEdit(self) self.textboxRight.resize(280, 40) button = QPushButton("Load Path") button.clicked.connect(self.beginProcessingDirectory) button2 = QPushButton("Back") button2.clicked.connect(self.goBack) button3 = QPushButton("Play All") button3.clicked.connect(self.playAllVideos) button4 = QPushButton("Stop All") button4.clicked.connect(self.stopAllVideos) layout.addWidget(button, 0, 3) layout.addWidget(button2, 1, 3) if self.enablePlayAll: layout.addWidget(button3, 2, 3) layout.addWidget(button4, 4, 3) # layout.addWidget(self.textboxLeft, 5, 0) layout.addWidget(self.textboxFront, 5, 1) layout.addWidget(self.textboxBack, 5, 2) layout.addWidget(self.textboxRight, 5, 3) layout.addWidget(self.videoPlayerLeft, 6, 0) layout.addWidget(self.videoPlayerFront, 6, 1) layout.addWidget(self.videoPlayerBack, 6, 2) layout.addWidget(self.videoPlayerRight, 6, 3) #List for list of files self.list = QListView() self.list.setWindowTitle("Tesla Foootage Analyzer") self.list.setMinimumSize(600, 400) self.list.setGeometry(self.left, self.top, self.width, self.height) layout.addWidget(self.list, 7, 0) self.list.show() self.list.clicked.connect(self.processDirectory) self.horizontalGroupBox.setLayout(layout) def beginProcessingDirectory(self): print("beginProcessingDirectory") dialog_txt = "Choose Media File" filename = QFileDialog.getExistingDirectory(self, dialog_txt, os.path.expanduser('~')) if not filename: print("unable to process empty directory, returning") return self.modelList = [] self.createListForDirectory(filename) def goBack(self): if self.basePath is None: return os.chdir(self.basePath) os.chdir("..") newPath = os.getcwd() print("back button going from: " + str(self.basePath) + " to " + str(newPath)) self.createListForDirectory(newPath) def playAllVideos(self): listPath = [] for index in range(self.model.rowCount()): item = self.model.item(index).text() partial = item[:len(item) - 1] # Disabling path processing here # localFilePathCheck = self.targetPath.split("\\") # builtPath = "" # count = 0 # for item in localFilePathCheck[0:len(localFilePathCheck)-1]: # additional = str("" if count == len(localFilePathCheck)-1 else "\\") # builtPath+=item + additional # count+=1 # containsLocalFileCheck = str(builtPath)+localFilePathCheck[len(localFilePathCheck)-1]+"back.mp4" # if os.path.exists(containsLocalFileCheck): # targetFile = self.joinAndSanitizePath(self.targetPath, localFilePathCheck[len(localFilePathCheck)-1]) # else: targetFile = self.joinAndSanitizePath(self.targetPath, partial) print("item: " + str(item) + " | partial: " + str(partial) + " || targetFile: " + str(targetFile)) listPath.append(os.path.abspath(targetFile)) list = [] for item in listPath: list.append(item + "-left_repeater.mp4") self.videoPlayerLeft.setPlaylistToPlayer(list) list.clear() # for item in listPath: list.append(item + "-front.mp4") self.videoPlayerFront.setPlaylistToPlayer(list) list.clear() # for item in listPath: list.append(item + "-right_repeater.mp4") self.videoPlayerRight.setPlaylistToPlayer(list) list.clear() # for item in listPath: list.append(item + "-back.mp4") self.videoPlayerBack.setPlaylistToPlayer(list) list.clear() self.videoPlayerLeft.list_player.play() self.videoPlayerFront.list_player.play() self.videoPlayerRight.list_player.play() self.videoPlayerBack.list_player.play() # will add files according to patterns for mp4s # and will also add regular directories # possibly split out mp4s to another UI piece def createListForDirectory(self, baseDirectory): self.model = QStandardItemModel(self.list) print("PROCESS DIRECTORY | ModeList[A] | adding: " + str(self.model)) self.basePath = baseDirectory directories = [] mp4Files = [] if not os.path.exists(baseDirectory): print("PROCESS DIRECTORY | ERROR NO PATH: " + baseDirectory) return for f in os.listdir(baseDirectory): if self.dumpFileProcessing: print("PROCESS DIRECTORY | file: " + str(f)) directoryPath = self.joinAndSanitizePath(baseDirectory, f) if (os.path.isdir(directoryPath)): if self.dumpFileProcessing: print("PROCESS DIRECTORY | 1 adding directory | " + directoryPath) if len(os.listdir(directoryPath)) <= 0: print( "PROCESS DIRECTORY | EMPTY PATH || Excluding path: " + str(directoryPath) + " due to empty") continue if self.dumpFileProcessing: print("PROCESS DIRECTORY | adding path " + f + " to directory list") directories.append(f) else: if ".mp4" in f: print("PROCESS DIRECTORY | adding mp4 " + f + " to mp4 list") mp4Files.append(f) listOfProcessedMp4s = self.processListOfMp4s(mp4Files) if listOfProcessedMp4s is not None: print("processing list of mp4s") listOfProcessedMp4s.sort() self.processListAndAdd(listOfProcessedMp4s) if directories is not None: print("processing list of directories") directories.sort() self.processListAndAdd(directories) self.list.setModel(self.model) def processListAndAdd(self, listToProcess): if listToProcess is not None: print("PROCESS LIST | List is not none | length: " + str(len(listToProcess))) for item in listToProcess: print("PROCESS LIST | List item: " + item) newItem = QStandardItem(item) if self.dumpFileProcessing: print("PROCESS LIST | adding :" + str(newItem) + " | to model") self.model.appendRow(newItem) else: print("List is empty") def processListOfMp4s(self, listOfMp4s): if listOfMp4s is None or len(listOfMp4s) == 0: print("no MP4s to process") return None print("PROCESSING MP4s | ") processedMp4s = [] for item in listOfMp4s: print("PROCESSING MP4s | item: " + item) if "front.mp4" in item: start = item.find("front.mp4") baseName = item[0:start] print("PROCESSING MP4s | baseName: " + baseName) processedMp4s.append(baseName) return processedMp4s def processDirectory(self, modelIndex): print("PROCESSING DIRECTORY | modelIndex: " + str(modelIndex)) targetFile = self.model.itemFromIndex(modelIndex).text() if self.dumpFileProcessing: print("PROCESSING DIRECTORY | 1 processing directory for: " + targetFile) path = self.joinAndSanitizePath(self.basePath, targetFile) self.targetPath = path print("PROCESSING DIRECTORY | processing directory in path: " + path) if not os.path.exists(path): print("PROCESSING DIRECTORY | checking path is mp4 pattern") self.processPattern(path) return else: self.createListForDirectory(path) def processPattern(self, pattern): targetFilePartial = pattern # 2019-11-19_21-21-45-back.mp4 print("\n2 PLAYING PATTERN | processing directory for: " + targetFilePartial) rebuiltPathA = self.joinAndSanitizePath( self.targetPath, targetFilePartial[:len(targetFilePartial) - 1]) #rebuiltPathB = os.path.abspath(os.path.join(rebuiltPathA, targetFilePartial)) print("PLAYING PATTERN |processing path(rebuilt): " + rebuiltPathA) self.pauseAllPlayersIfNecessary() partial = targetFilePartial[:len(targetFilePartial) - 1] listofItems = partial.split("\\") lastPart = listofItems[len(listofItems) - 1] mainDate = lastPart.split("_") actualDateRaw = mainDate[0].split("-") actualTimeRaw = mainDate[1].split("-") actualDate = datetime( int(actualDateRaw[0]), int(actualDateRaw[1]), int(actualDateRaw[2]), int(actualTimeRaw[0]), int(actualTimeRaw[1]), int(actualTimeRaw[2])).strftime("%B %d. %A %Y %I:%M %p") self.horizontalGroupBox.setTitle("Path: " + self.targetPath + " | Date(formatted): " + actualDate) self.textboxLeft.setText("Left: " + partial + "-left_repeater.mp4") self.videoPlayerLeft.open_file( os.path.abspath( os.path.join(self.targetPath, partial + "-left_repeater.mp4"))) self.textboxFront.setText("Front: " + partial + "-front.mp4 | ") self.videoPlayerFront.open_file( os.path.abspath( os.path.join(self.targetPath, partial + "-front.mp4"))) self.textboxBack.setText("Front: " + partial + "-back.mp4") self.videoPlayerBack.open_file( os.path.abspath( os.path.join(self.targetPath, partial + "-back.mp4"))) self.textboxRight.setText("Right: " + partial + "-right_repeater.mp4") self.videoPlayerRight.open_file( os.path.abspath( os.path.join(self.targetPath, partial + "-right_repeater.mp4"))) def pauseAllPlayersIfNecessary(self): if self.videoPlayerLeft.isPlaying(): self.videoPlayerLeft.stop() if self.videoPlayerFront.isPlaying(): self.videoPlayerFront.stop() if self.videoPlayerBack.isPlaying(): self.videoPlayerBack.stop() if self.videoPlayerRight.isPlaying(): self.videoPlayerRight.stop() def stopAllVideos(self): self.pauseAllPlayersIfNecessary() def sanitizePaths(self, path1): return os.path.abspath(path1) def joinAndSanitizePath(self, path1, path2): return self.sanitizePaths(os.path.join(path1, path2))
class CollectData(QWidget): def __init__(self): super().__init__() self.init_variable() self.init_img() self.init_ui() self.show() def init_img(self): self.qlabel = myLabel(self) img = cv2.imread('data/test.png') # 打开图片 self.qlabel.img = img.copy() self.qlabel.img_current = img.copy() self.update_img() def init_variable(self): self.label = 0 self.transformation_type = 0 self.total_img_number = 0 self.current_img_index = 0 self.folder_path = r"data" self.jump_img_index = -1 self.img_list = [] self.img_name_list = [] def init_ui(self): self.setGeometry(200, 200, 1000, 800) self.setWindowTitle('数据标注') self.qlabel.setGeometry(QRect(30, 30, 640, 480)) self.init_buttons() for file_name in os.listdir(self.folder_path + '/'): img = cv2.imread(self.folder_path + '/' + file_name) if img is None: continue self.img_list.append(img) self.img_name_list.append( os.path.splitext(self.folder_path + '/' + file_name)[0]) #QMessageBox.information(self, 'complete', '图片加载完毕') self.total_img_number = len(self.img_list) self.current_img_index = 1 self.refresh_img() self.update_list() def init_buttons(self): self.previous_img_button = QPushButton("上一张图片", self) self.next_img_button = QPushButton("下一张图片", self) self.save_message_button = QPushButton("保存当前图片信息", self) self.show_message_button = QPushButton("显示当前图片信息", self) self.open_folder_button = QPushButton("打开文件夹", self) self.add_border_button = QPushButton("保存当前框", self) self.delete_border_button = QPushButton("删除选中框", self) self.img_folder_text = QLineEdit('data', self) self.goto_chosen_img_button = QPushButton("跳转图片", self) self.jump_img_text = QLineEdit('', self) self.show_index_message = QLabel(self) self.img_folder_text.selectAll() self.img_folder_text.setFocus() self.previous_img_button.setGeometry(30, 530, 150, 40) self.next_img_button.setGeometry(200, 530, 150, 40) self.save_message_button.setGeometry(370, 530, 150, 40) self.show_message_button.setGeometry(540, 530, 150, 40) self.img_folder_text.setGeometry(30, 590, 660, 40) self.open_folder_button.setGeometry(710, 590, 150, 40) self.jump_img_text.setGeometry(30, 650, 150, 40) self.goto_chosen_img_button.setGeometry(200, 650, 150, 40) self.show_index_message.setGeometry(30, 710, 200, 40) self.add_border_button.setGeometry(710, 380, 150, 40) self.delete_border_button.setGeometry(710, 440, 150, 40) self.previous_img_button.clicked.connect(self.previous_img) self.next_img_button.clicked.connect(self.next_img) self.save_message_button.clicked.connect(self.save_message) self.show_message_button.clicked.connect(self.show_message) self.open_folder_button.clicked.connect(self.open_folder) self.add_border_button.clicked.connect(self.save_current_border) self.delete_border_button.clicked.connect(self.delete_border) self.goto_chosen_img_button.clicked.connect(self.goto_chosen_img) self.label_combo = QComboBox(self) for i in range(len(LABEL_LIST)): self.label_combo.addItem(LABEL_LIST[i]) self.label_combo.move(900, 30) self.label_combo.activated[str].connect(self.label_on_activated) self.listview = QListView(self) self.listview.setGeometry(710, 30, 150, 320) self.listview.doubleClicked.connect(self.list_clicked) self.listview.setEditTriggers(QListView.NoEditTriggers) def previous_img(self): if self.current_img_index == 1: QMessageBox.information(self, 'warning', '已经是第一张啦') return self.current_img_index -= 1 self.refresh_img() def next_img(self): if self.current_img_index == self.total_img_number: QMessageBox.information(self, 'warning', '已经是最后一张啦') return self.current_img_index += 1 self.refresh_img() def show_message(self): if len(self.qlabel.rectangle_label) > 0: reply = QMessageBox.question(self, '确认', '当前有未保存信息,是否继续?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.No: return self.qlabel.rectangle_label.clear() if os.path.isfile(self.img_name_list[self.current_img_index - 1] + '.csv') == False: QMessageBox.information(self, 'warning', '当前图片无信息') return message = pd.read_csv(self.img_name_list[self.current_img_index - 1] + '.csv', sep=',', header=None) message = np.array(message.T) message = message.astype(int) for i in range(len(message)): self.qlabel.rectangle_label.append( Rectangle(message[i][1], message[i][2], message[i][3], message[i][4], True, message[i][0])) self.update_list() self.refresh_img() QMessageBox.information(self, 'complete', '信息加载完毕') def open_folder(self): self.folder_path = self.img_folder_text.text() if os.path.isdir(self.folder_path) == False: QMessageBox.information(self, 'warning', '文件夹路径非法') return self.img_list.clear() self.img_name_list.clear() for file_name in os.listdir(self.folder_path + '/'): img = cv2.imread(self.folder_path + '/' + file_name) if img is None: continue self.img_list.append(img) self.img_name_list.append( os.path.splitext(self.folder_path + '/' + file_name)[0]) QMessageBox.information(self, 'complete', '图片加载完毕') self.total_img_number = len(self.img_list) self.current_img_index = 1 self.refresh_img() def goto_chosen_img(self): if int(self.jump_img_text.text()) <= 0 or int( self.jump_img_text.text()) > self.total_img_number: QMessageBox.information(self, 'warning', '已经是最后一张啦') return self.current_img_index = int(self.jump_img_text.text()) self.refresh_img() def refresh_img(self): img = self.img_list[self.current_img_index - 1] self.qlabel.img = img.copy() self.qlabel.update_qlabel_img() self.update_img() self.show_index_message.setText('一共' + str(self.total_img_number) + '张图片,当前第' + str(self.current_img_index) + '张图片') def label_on_activated(self): self.label = self.label_combo.currentIndex() def update_list(self): slm = QStringListModel() string_list = [] for i in range(len(self.qlabel.rectangle_label)): string_list.append( LABEL_LIST[self.qlabel.rectangle_label[i].label]) slm.setStringList(string_list) self.listview.setModel(slm) def list_clicked(self, qModelIndex): if self.qlabel.rectangle_label[ qModelIndex.row()].whether_display == True: self.qlabel.rectangle_label[ qModelIndex.row()].whether_display = False else: self.qlabel.rectangle_label[ qModelIndex.row()].whether_display = True self.qlabel.update_qlabel_img() self.update_img() def save_current_border(self): self.qlabel.save_current_border(self.label) self.qlabel.update_qlabel_img() self.update_img() self.update_list() def update_img(self): img_resize = cv2.resize( self.qlabel.img_current, (self.qlabel.qlabel_length, self.qlabel.qlabel_width)) height, width, bytesPerComponent = img_resize.shape bytesPerLine = 3 * width cv2.cvtColor(img_resize, cv2.COLOR_BGR2RGB, img_resize) QImg = QImage(img_resize.data, width, height, bytesPerLine, QImage.Format_RGB888) pixmap = QPixmap.fromImage(QImg) self.qlabel.setPixmap(pixmap) self.qlabel.setCursor(Qt.CrossCursor) def label_clicked(self): sender = self.sender() if sender == self.label_button: self.label = self.label_button.checkedId() def save_message(self): self.save_current_angle() img = cv2.imread('data/test.png') # 打开图片 self.qlabel.rectangle_label.clear() self.update_img() self.update_list() self.qlabel.img = img.copy() self.qlabel.img_current = img.copy() self.update_img() def save_current_angle(self): if os.path.isfile(self.img_name_list[self.current_img_index - 1] + '.csv'): reply = QMessageBox.question(self, '确认', '是否覆盖当前图片已保存信息?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.No: return save_data = [] for i in range(5): save_data.append([]) if len(self.qlabel.rectangle_label) > 0: for i in range(len(self.qlabel.rectangle_label)): save_data[0].append(self.qlabel.rectangle_label[i].label) save_data[1].append(self.qlabel.rectangle_label[i].x0) save_data[2].append(self.qlabel.rectangle_label[i].x1) save_data[3].append(self.qlabel.rectangle_label[i].y0) save_data[4].append(self.qlabel.rectangle_label[i].y1) if np.shape(np.array(save_data)) != (5, 0): print(self.current_img_index) np.savetxt(self.img_name_list[self.current_img_index - 1] + '.csv', np.array(save_data), delimiter=',') def delete_border(self): if self.listview.currentIndex().row() > -1: self.qlabel.delete_border(self.listview.currentIndex().row()) self.qlabel.update_qlabel_img() self.update_img() self.update_list() else: QMessageBox.information(self, 'warning', '请先选中一行')
class MainWindow(QMainWindow): logout_signal = pyqtSignal() send_message_signal = pyqtSignal(str, str) start_chatting_signal = pyqtSignal(str) switch_to_add_contact = pyqtSignal() switch_to_del_contact = pyqtSignal() def __init__(self, client_name): super().__init__() self.setFixedSize(756, 574) self.setWindowTitle(f'Python Messenger ({client_name})') central_widget = QWidget() self.label_contacts = QLabel('Contact list:', central_widget) self.label_contacts.setGeometry(QRect(10, 0, 101, 16)) self.add_contact_btn = QPushButton('Add contact', central_widget) self.add_contact_btn.setGeometry(QRect(10, 450, 121, 31)) self.remove_contact_btn = QPushButton('Remove contact', central_widget) self.remove_contact_btn.setGeometry(QRect(140, 450, 121, 31)) self.label_history = QLabel('Chat room:', central_widget) self.label_history.setGeometry(QRect(300, 0, 391, 21)) self.text_message = QTextEdit(central_widget) self.text_message.setGeometry(QRect(300, 360, 441, 71)) self.label_new_message = QLabel('Enter message here:', central_widget) self.label_new_message.setGeometry(QRect(300, 330, 450, 16)) self.toolbar = self.addToolBar('Formatting') self.char_style_resolver = { 'bold': self.set_text_to_bold, 'italic': self.set_text_to_italic, 'underline': self.set_text_to_underline, } self.font_weight = 50 self.font_italic = False self.font_underline = False self.text_font = QFont() self.text_bold = QAction(QIcon('client/ui/icons/b.jpg'), 'Bold', self) self.text_bold.triggered.connect(lambda: self.set_char_style('bold')) self.text_italic = QAction(QIcon('client/ui/icons/i.jpg'), 'Italic', self) self.text_italic.triggered.connect( lambda: self.set_char_style('italic')) self.text_underline = QAction(QIcon('client/ui/icons/u.jpg'), 'Underline', self) self.text_underline.triggered.connect( lambda: self.set_char_style('underline')) self.toolbar.addActions( [self.text_bold, self.text_italic, self.text_underline]) self.list_contacts = QListView(central_widget) self.list_contacts.setGeometry(QRect(10, 20, 251, 411)) self.contacts_model = QStandardItemModel() self.list_contacts.setModel(self.contacts_model) self.list_messages = QListView(central_widget) self.list_messages.setGeometry(QRect(300, 20, 441, 301)) self.messages_model = QStandardItemModel() self.list_messages.setModel(self.messages_model) self.is_list_messages_disable = False self.send_btn = QPushButton('Send', central_widget) self.send_btn.setGeometry(QRect(610, 450, 131, 31)) self.clear_btn = QPushButton('Clear', central_widget) self.clear_btn.setGeometry(QRect(460, 450, 131, 31)) self.setCentralWidget(central_widget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 756, 21)) self.menu = QMenu('File', self.menubar) self.menu_2 = QMenu('Contacts', self.menubar) self.setMenuBar(self.menubar) self.statusBar = QStatusBar(self) self.setStatusBar(self.statusBar) self.menu_exit = QAction('Exit', self) self.menu_logout = QAction('Logout', self) self.menu.addAction(self.menu_exit) self.menu.addAction(self.menu_logout) self.add_contact_menu = QAction('Add new', self) self.del_contact_menu = QAction('Remove some', self) self.menu_2.addAction(self.add_contact_menu) self.menu_2.addAction(self.del_contact_menu) self.menu_2.addSeparator() self.menubar.addAction(self.menu.menuAction()) self.menubar.addAction(self.menu_2.menuAction()) self.message = QMessageBox() self.menu_exit.triggered.connect(qApp.exit) self.menu_logout.triggered.connect(self.menu_logout_handler) self.send_btn.clicked.connect(self.send_btn_handler) self.add_contact_btn.clicked.connect(self.add_contact_btn_handler) self.add_contact_menu.triggered.connect(self.add_contact_btn_handler) self.remove_contact_btn.clicked.connect(self.del_contact_btn_handler) self.del_contact_menu.triggered.connect(self.del_contact_btn_handler) self.list_contacts.doubleClicked.connect( self.list_contacts_click_handler) def set_elements_disable_status(self, status): if not isinstance(status, bool): raise ValueError( f'Disable status must be bool. Got {type(status)}') self.send_btn.setDisabled(status) self.clear_btn.setDisabled(status) self.text_message.setDisabled(status) self.is_list_messages_disable = status def render_welcome_message(self): self.messages_model.clear() msg = QStandardItem( f'Doubleclick to contact in contact list for start chatting.') msg.setEditable(False) self.messages_model.appendRow(msg) def render_contacts(self, contacts): self.contacts_model.clear() if contacts and isinstance(contacts, list): for contact in contacts: rendered_contact = QStandardItem(contact.friend) rendered_contact.setEditable(False) self.contacts_model.appendRow(rendered_contact) def render_messages(self, friend, client_name, messages): self.messages_model.clear() if messages and isinstance(messages, list): for message in messages: self.render_message(friend, client_name, message) self.list_messages.scrollToBottom() def render_message(self, friend, client_name, message): if not self.is_list_messages_disable: if message.from_client in (friend, client_name): date = message.created.replace(microsecond=0) text = message.text from_client = message.from_client msg = QStandardItem(f'{date}\n{from_client}:\n{text}') msg.setEditable(False) if from_client == client_name: msg.setTextAlignment(Qt.AlignRight) msg.setBackground(QBrush(QColor(240, 240, 240))) self.messages_model.appendRow(msg) self.list_messages.scrollToBottom() def menu_logout_handler(self): self.logout_signal.emit() def send_btn_handler(self): message = self.text_message.toPlainText() to_client_name = self.list_contacts.currentIndex().data() if message and to_client_name: self.send_message_signal.emit(to_client_name, message) self.text_message.clear() def add_contact_btn_handler(self): self.switch_to_add_contact.emit() def del_contact_btn_handler(self): self.switch_to_del_contact.emit() def list_contacts_click_handler(self): self.messages_model.clear() self.set_elements_disable_status(False) friend = self.list_contacts.currentIndex().data() self.start_chatting_signal.emit(friend) def set_char_style(self, style): cursor = self.text_message.textCursor() char_format = QTextCharFormat() self.char_style_resolver[style](char_format) cursor.mergeCharFormat(char_format) def set_text_to_bold(self, char_format): bold_weight = 600 thin_weight = 50 weight = bold_weight if self.font_weight < bold_weight else thin_weight char_format.setFontWeight(weight) self.font_weight = weight def set_text_to_italic(self, char_format): char_format.setFontItalic(not self.font_italic) self.font_italic = not self.font_italic def set_text_to_underline(self, char_format): char_format.setFontUnderline(not self.font_underline) self.font_underline = not self.font_underline
class Gui(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 主要数据 self.websiteUrl = [] self.m3u8Url = '' self.m3u8List = [] self.downloadAll = True # 定义输入框 self.lineEdit = QLineEdit(self) self.lineEdit.setGeometry(10, 10, 250, 30) # 定义按钮 self.searchBtn = QPushButton('搜索', self) self.searchBtn.setGeometry(270, 10, 70, 30) self.searchBtn.clicked.connect(self.search) self.downloadAllBtn = QPushButton('下载全部', self) self.downloadAllBtn.setGeometry(270, 50, 70, 30) self.downloadAllBtn.clicked.connect(self.downloadM3u8) # 定义列表 self.listView = QListView(self) self.listView.setGeometry(10, 50, 250, 140) # 定义自身窗体 self.setGeometry(300, 300, 350, 200) self.setWindowIcon(QIcon('./asset/img/logo.png')) self.setWindowTitle('M3u8Downloader') self.setFixedSize(self.width(), self.height()) self.show() def search(self): self.websiteUrl = self.lineEdit.text().strip() if self.websiteUrl == '': self.alertMsg('请输入网页地址') elif re.match(r'^http[s]?:/{2}\w.+$', self.websiteUrl) is None: self.alertMsg('请输入合法的网页地址') elif re.match( r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+.m3u8', self.websiteUrl) is not None: self.m3u8List.append(self.websiteUrl) if len(self.m3u8List): stringListModel = QStringListModel() stringListModel.setStringList(self.m3u8List) self.listView.setModel(stringListModel) else: spiderThread = threading.Thread(target=self.spiderM3u8List()) spiderThread.start() def spiderM3u8List(self): p = m3u8Spider.M3u8Spider(self.websiteUrl) if (p.createProxyIpPool()): proxyUrl = p.getProxyUrl() userAgent = p.getUserAgent() header = {'user-agent': userAgent} self.m3u8List = p.getM3u8List('', header) print(self.m3u8List) if len(self.m3u8List): stringListModel = QStringListModel() stringListModel.setStringList(self.m3u8List) self.listView.setModel(stringListModel) def downloadM3u8(self): m3u8List = [] if self.downloadAll == True: m3u8List = self.m3u8List else: m3u8List.append(self.m3u8Url) if len(m3u8List) > 0: saveDir = 'download/' file = 'video.mp4' # 初始化下载参数 options = { 'm3u8Url': '', 'saveDir': saveDir, 'file': file, 'downloadParams': '-vcodec copy -acodec copy -absf aac_adtstoasc' } for m3u8Url in m3u8List: options['m3u8Url'] = m3u8Url options['file'] = ''.join( random.sample(string.ascii_letters + string.digits, 16)) + '.mp4' # 提取m3u8流,生成mp4 down = downloader.Downloader(options) res = down.download() print(res) else: self.alertMsg('目前暂无可下载的m3u8地址') def alertMsg(self, text): QMessageBox.information(self, '消息', text)
class keepColumn(QDialog): def __init__(self, parent=None): self.parent = parent self.parent.statusbar.showMessage("Keep Columns started...") QWidget.__init__(self,parent) self.ui = gui.keepColumnUi() self.ui.setupUi(self) self.columns = [] self.batch_files = filedialog.askopenfilenames(parent=root, title='Choose the file(s) you want to modify') if len(self.batch_files) == 0: self.close() return self.parent.statusbar.showMessage("Checking column validity...") #extract columns for item in self.batch_files: self.columns.append(helpers.extract_columns(item)) #check to see if all columns are equal in all the datasets if not helpers.are_columns_same(self.columns): if not helpers.columns_not_equal_message(self): self.close() return #list of items to check from self.model = QStandardItemModel() try: for col in self.columns[0]: item = QStandardItem(col) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(QVariant(Qt.Unchecked), Qt.CheckStateRole) self.model.appendRow(item) except IndexError: pass self.list = QListView(self) self.list.setModel(self.model) self.list.setGeometry(10, 60, 380, 430) self.ui.removeBtn.clicked.connect(self.keep) self.ui.closeBtn.clicked.connect(self.close) self.parent.statusbar.showMessage("Welcome back!") self.show() def close(self): self.parent.statusbar.showMessage("Welcome back!") self.parent.ui.logOutput.append("") self.done(55) def keep(self): self.parent.statusbar.showMessage("Keep Columns in process...") self.columns_to_keep = [] i = 0 while self.model.item(i): if self.model.item(i).checkState() == 2: self.columns_to_keep.append(self.model.item(i).text()) i += 1 query = "Are you sure you want to proceed?" reply = QMessageBox.question(self, 'Message',query, QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.No: self.columns_to_keep = [] return self.parent.statusbar.showMessage("Processing...") self.parent.ui.logOutput.append("KEPT:") print("KEPT:") #per file first retrieve data then filter columnarly for file in self.batch_files: list_colindx = [] datablob = helpers.clean_header(file) for item in self.columns_to_keep: list_colindx.append(datablob[0].index(item)) for i in range(len(datablob)): datablob[i][:] = [x for i, x in enumerate(datablob[i]) if i in list_colindx] split_name = file.split('.') now = time.strftime('%Y%m%d_%H%M%S', time.localtime(time.time())) output_file = split_name[0] + "_keep_columns_" + now + "." + split_name[1] helpers.write_out_to_file(output_file,datablob) self.parent.ui.logOutput.append(" " + str(file.split('/')[-1])) print(" " + str(file.split('/')[-1])) helpers.job_complete_message(self) self.parent.statusbar.showMessage("Welcome Back!") self.close()
class CollectData(QWidget): def __init__(self): super().__init__() self.init_variable() self.init_img() self.init_ui() self.show() ''' def paintEvent(self, QPaintEvent): painter = QPainter(self) painter.setPen(QColor(166,66,250)) painter.begin(self) painter.draw() painter.end() ''' def init_img(self): self.qlabel = myLabel(self) img = cv2.imread('data/test.png') # 打开图片 self.qlabel.img = img.copy() self.qlabel.img_current = img.copy() self.qlabel.update_img() def init_variable(self): self.label = 0 self.transformation_type = 0 self.total_img_number = 0 self.current_img_index = 0 self.folder_path = r"data" self.jump_img_index = -1 self.img_list = [] self.img_name_list = [] self.whether_to_crop = 0 def init_ui(self): self.setGeometry(200, 200, 1000, 800) self.setWindowTitle('数据标注') self.qlabel.setGeometry(QRect(30, 30, 640, 480)) self.init_buttons() for file_name in os.listdir(self.folder_path + '/'): img = cv2.imread(self.folder_path + '/' + file_name) if img is None: continue self.img_list.append(img) self.img_name_list.append(os.path.splitext(file_name)[0]) #QMessageBox.information(self, 'complete', '图片加载完毕') self.total_img_number = len(self.img_list) self.current_img_index = 1 self.refresh_img() self.update_list() def init_buttons(self): self.previous_img_button = QPushButton("上一张图片", self) self.next_img_button = QPushButton("下一张图片", self) self.save_message_button = QPushButton("保存当前图片信息", self) self.show_message_button = QPushButton("显示当前图片信息", self) self.open_folder_button = QPushButton("打开文件夹", self) self.add_border_button = QPushButton("保存当前框", self) self.delete_border_button = QPushButton("删除选中框", self) self.img_folder_text = QLineEdit('data', self) self.goto_chosen_img_button = QPushButton("跳转图片", self) self.jump_img_text = QLineEdit('', self) self.show_index_message = QLabel(self) self.crop_message_box = QCheckBox('裁剪所选图片', self) self.img_folder_text.selectAll() self.img_folder_text.setFocus() self.previous_img_button.setGeometry(30, 530, 150, 40) self.next_img_button.setGeometry(200, 530, 150, 40) self.save_message_button.setGeometry(370, 530, 150, 40) self.show_message_button.setGeometry(540, 530, 150, 40) self.img_folder_text.setGeometry(30, 590, 660, 40) self.open_folder_button.setGeometry(710, 590, 150, 40) self.jump_img_text.setGeometry(30, 650, 150, 40) self.goto_chosen_img_button.setGeometry(200, 650, 150, 40) self.show_index_message.setGeometry(30, 710, 300, 40) self.crop_message_box.setGeometry(30, 750, 150, 40) self.add_border_button.setGeometry(710, 380, 150, 40) self.delete_border_button.setGeometry(710, 440, 150, 40) self.previous_img_button.clicked.connect(self.previous_img) self.next_img_button.clicked.connect(self.next_img) self.save_message_button.clicked.connect(self.save_message) self.show_message_button.clicked.connect(self.show_message) self.open_folder_button.clicked.connect(self.open_folder) self.add_border_button.clicked.connect(self.save_current_border) self.delete_border_button.clicked.connect(self.delete_border) self.goto_chosen_img_button.clicked.connect(self.goto_chosen_img) self.crop_message_box.stateChanged.connect(self.crop_message) self.label_combo = QComboBox(self) for i in range(len(LABEL_LIST)): self.label_combo.addItem(LABEL_LIST[i]) self.label_combo.move(900, 30) self.label_combo.activated[str].connect(self.label_on_activated) self.listview = QListView(self) self.listview.setGeometry(710, 30, 150, 320) self.listview.doubleClicked.connect(self.list_clicked) self.listview.setEditTriggers(QListView.NoEditTriggers) def crop_message(self): self.whether_to_crop = self.crop_message_box.checkState() def previous_img(self): if self.current_img_index == 1: QMessageBox.information(self, 'warning', '已经是第一张啦') return self.current_img_index -= 1 self.refresh_img() def next_img(self): if self.current_img_index == self.total_img_number: QMessageBox.information(self, 'warning', '已经是最后一张啦') return self.current_img_index += 1 self.refresh_img() def show_message(self): if len(self.qlabel.rectangle_label) > 0: reply = QMessageBox.question(self, '确认', '当前有未保存信息,是否继续?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.No: return self.qlabel.rectangle_label.clear() if os.path.isfile(self.folder_path + '/' + self.img_name_list[self.current_img_index - 1] + '.csv') == False: QMessageBox.information(self, 'warning', '当前图片无信息') return message = pd.read_csv(self.folder_path + '/' + self.img_name_list[self.current_img_index - 1] + '.csv', sep=',', header=None) message = np.array(message.T) message = message.astype(int) for i in range(len(message)): self.qlabel.rectangle_label.append( Rectangle(message[i][1], message[i][2], message[i][3], message[i][4], True, message[i][0])) self.update_list() self.refresh_img() QMessageBox.information(self, 'complete', '信息加载完毕') def open_folder(self): self.folder_path = self.img_folder_text.text() if os.path.isdir(self.folder_path) == False: QMessageBox.information(self, 'warning', '文件夹路径非法') return self.img_list.clear() self.img_name_list.clear() for file_name in os.listdir(self.folder_path + '/'): img = cv2.imread(self.folder_path + '/' + file_name) if img is None: continue self.img_list.append(img) self.img_name_list.append(os.path.splitext(file_name)[0]) QMessageBox.information(self, 'complete', '图片加载完毕') self.total_img_number = len(self.img_list) self.current_img_index = 1 self.refresh_img() def goto_chosen_img(self): if self.jump_img_text.text().isdigit() == False: QMessageBox.information(self, 'warning', '请输入合法的数字') return if int(self.jump_img_text.text()) <= 0 or int( self.jump_img_text.text()) > self.total_img_number: QMessageBox.information(self, 'warning', '请输入合法的数字') return self.current_img_index = int(self.jump_img_text.text()) self.refresh_img() def refresh_img(self): img = self.img_list[self.current_img_index - 1] self.qlabel.img = img.copy() self.qlabel.update_qlabel_img() self.qlabel.update_img() self.show_index_message.setText('一共' + str(self.total_img_number) + '张图片,当前第' + str(self.current_img_index) + '张图片') def label_on_activated(self): self.label = self.label_combo.currentIndex() def update_list(self): slm = QStringListModel() string_list = [] for i in range(len(self.qlabel.rectangle_label)): string_list.append( LABEL_LIST[self.qlabel.rectangle_label[i].label]) slm.setStringList(string_list) self.listview.setModel(slm) def list_clicked(self, qModelIndex): if self.qlabel.rectangle_label[ qModelIndex.row()].whether_display == True: self.qlabel.rectangle_label[ qModelIndex.row()].whether_display = False else: self.qlabel.rectangle_label[ qModelIndex.row()].whether_display = True self.qlabel.update_qlabel_img() self.qlabel.update_img() def save_current_border(self): self.qlabel.save_current_border(self.label) self.qlabel.update_qlabel_img() self.qlabel.update_img() self.update_list() def label_clicked(self): sender = self.sender() if sender == self.label_button: self.label = self.label_button.checkedId() def save_message(self): if self.save_current_angle() == False: return self.qlabel.rectangle_label.clear() self.update_list() self.refresh_img() def save_current_angle(self): save_data = [] for i in range(5): save_data.append([]) if len(self.qlabel.rectangle_label) > 0: if os.path.isfile(self.folder_path + '/' + self.img_name_list[self.current_img_index - 1] + '.csv'): reply = QMessageBox.question(self, '确认', '是否覆盖当前图片已保存信息?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.No: return False for i in range(len(self.qlabel.rectangle_label)): save_data[0].append(self.qlabel.rectangle_label[i].label) save_data[1].append(self.qlabel.rectangle_label[i].x0) save_data[2].append(self.qlabel.rectangle_label[i].x1) save_data[3].append(self.qlabel.rectangle_label[i].y0) save_data[4].append(self.qlabel.rectangle_label[i].y1) if os.path.exists('crop_img/') == False: os.makedirs('crop_img/') h, w, channel = self.qlabel.img.shape img_after_crop = self.qlabel.img[ self.qlabel.rectangle_label[i].y0 * h // self.qlabel. qlabel_width:self.qlabel.rectangle_label[i].y1 * h // self.qlabel.qlabel_width, self.qlabel.rectangle_label[i].x0 * w // self.qlabel. qlabel_length:self.qlabel.rectangle_label[i].x1 * w // self.qlabel.qlabel_length] if self.whether_to_crop == 1: cv2.imwrite( 'crop_img/' + self.img_name_list[self.current_img_index - 1] + '_' + str(i) + '.jpg', img_after_crop) if np.shape(np.array(save_data)) != (5, 0): np.savetxt(self.folder_path + '/' + self.img_name_list[self.current_img_index - 1] + '.csv', np.array(save_data), delimiter=',') def delete_border(self): if self.listview.currentIndex().row() > -1: self.qlabel.delete_border(self.listview.currentIndex().row()) self.qlabel.update_qlabel_img() self.qlabel.update_img() self.update_list() else: QMessageBox.information(self, 'warning', '请先选中一行')
class UiMainClientWindow(object): """ Класс, создающий интерфейс главного окна. """ def __init__(self, main_client_window): main_client_window.setObjectName("MainClientWindow") main_client_window.resize(756, 534) main_client_window.setMinimumSize(QSize(756, 534)) self.centralwidget = QWidget(main_client_window) self.centralwidget.setObjectName("centralwidget") self.label_contacts = QLabel(self.centralwidget) self.label_contacts.setGeometry(QRect(10, 0, 101, 16)) self.label_contacts.setObjectName("label_contacts") self.btn_add_contact = QPushButton(self.centralwidget) self.btn_add_contact.setGeometry(QRect(10, 450, 121, 31)) self.btn_add_contact.setObjectName("btn_add_contact") self.btn_remove_contact = QPushButton(self.centralwidget) self.btn_remove_contact.setGeometry(QRect(140, 450, 121, 31)) self.btn_remove_contact.setObjectName("btn_remove_contact") self.label_history = QLabel(self.centralwidget) self.label_history.setGeometry(QRect(300, 0, 391, 21)) self.label_history.setObjectName("label_history") self.text_message = QTextEdit(self.centralwidget) self.text_message.setGeometry(QRect(300, 360, 441, 71)) self.text_message.setObjectName("text_message") self.label_new_message = QLabel(self.centralwidget) self.label_new_message.setGeometry(QRect(300, 330, 450, 16)) # Правка тут self.label_new_message.setObjectName("label_new_message") self.list_contacts = QListView(self.centralwidget) self.list_contacts.setGeometry(QRect(10, 20, 251, 411)) self.list_contacts.setObjectName("list_contacts") self.list_messages = QListView(self.centralwidget) self.list_messages.setGeometry(QRect(300, 20, 441, 301)) self.list_messages.setObjectName("list_messages") self.btn_send = QPushButton(self.centralwidget) self.btn_send.setGeometry(QRect(610, 450, 131, 31)) self.btn_send.setObjectName("btn_send") self.btn_clear = QPushButton(self.centralwidget) self.btn_clear.setGeometry(QRect(460, 450, 131, 31)) self.btn_clear.setObjectName("btn_clear") main_client_window.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(main_client_window) self.menubar.setGeometry(QRect(0, 0, 756, 21)) self.menubar.setObjectName("menubar") self.menu = QMenu(self.menubar) self.menu.setObjectName("menu") self.menu_2 = QMenu(self.menubar) self.menu_2.setObjectName("menu_2") main_client_window.setMenuBar(self.menubar) self.statusBar = QStatusBar(main_client_window) self.statusBar.setObjectName("statusBar") main_client_window.setStatusBar(self.statusBar) self.menu_exit = QAction(main_client_window) self.menu_exit.setObjectName("menu_exit") self.menu_add_contact = QAction(main_client_window) self.menu_add_contact.setObjectName("menu_add_contact") self.menu_del_contact = QAction(main_client_window) self.menu_del_contact.setObjectName("menu_del_contact") self.menu.addAction(self.menu_exit) self.menu_2.addAction(self.menu_add_contact) self.menu_2.addAction(self.menu_del_contact) self.menu_2.addSeparator() self.menubar.addAction(self.menu.menuAction()) self.menubar.addAction(self.menu_2.menuAction()) self.retranslate_ui(main_client_window) self.btn_clear.clicked.connect(self.text_message.clear) QMetaObject.connectSlotsByName(main_client_window) def retranslate_ui(self, main_client_window): _translate = QCoreApplication.translate main_client_window.setWindowTitle( _translate("MainClientWindow", "Чат Программа alpha release")) self.label_contacts.setText( _translate("MainClientWindow", "Список контактов:")) self.btn_add_contact.setText( _translate("MainClientWindow", "Добавить контакт")) self.btn_remove_contact.setText( _translate("MainClientWindow", "Удалить контакт")) self.label_history.setText( _translate("MainClientWindow", "История сообщений:")) self.label_new_message.setText( _translate("MainClientWindow", "Введите новое сообщение:")) self.btn_send.setText( _translate("MainClientWindow", "Отправить сообщение")) self.btn_clear.setText(_translate("MainClientWindow", "Очистить поле")) self.menu.setTitle(_translate("MainClientWindow", "Файл")) self.menu_2.setTitle(_translate("MainClientWindow", "Контакты")) self.menu_exit.setText(_translate("MainClientWindow", "Выход")) self.menu_add_contact.setText( _translate("MainClientWindow", "Добавить контакт")) self.menu_del_contact.setText( _translate("MainClientWindow", "Удалить контакт"))