コード例 #1
0
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)
コード例 #2
0
ファイル: course.py プロジェクト: lehaifeng000/sjk_demo
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)
コード例 #3
0
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)
コード例 #4
0
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()
コード例 #5
0
    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()
コード例 #6
0
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)
コード例 #7
0
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执行后立马销毁
コード例 #8
0
ファイル: Ui_Main.py プロジェクト: 970753520/-
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')
コード例 #9
0
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()
コード例 #10
0
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
コード例 #11
0
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", "Удалить контакт"))
コード例 #12
0
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))
コード例 #13
0
ファイル: main.py プロジェクト: dive2space/bounding_box_tools
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', '请先选中一行')
コード例 #14
0
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
コード例 #15
0
ファイル: gui.py プロジェクト: shinn-lancelot/M3u8Downloader
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)
コード例 #16
0
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()
コード例 #17
0
ファイル: main.py プロジェクト: jizhenjun/bounding_box_tools
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', '请先选中一行')
コード例 #18
0
ファイル: client_gui.py プロジェクト: SPELLGIRL/PyQT
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", "Удалить контакт"))