def initUI(self): self.lbl = QLabel("Ubuntu", self) self.lbl.move(50, 150) combo = QComboBox(self) combo.addItem("Ubuntu") combo.addItem("Mac OS") combo.addItem("Windows") combo.addItem("Red Hat") combo.addItem("Fedora") combo.move(50, 50) combo.setGeometry(50, 50, 100, 100) combo.activated[str].connect(self.onActivated) self.setGeometry(300, 300, 200, 200) self.setWindowTitle('QComboBox') self.show()
def initUI(self): self.lbl = QLabel("Ubuntu", self) # 设置Label默认值 combo = QComboBox(self) combo.addItem("Ubuntu") combo.addItem("Mandriva") combo.addItem("Fedora") combo.addItem("Arch") combo.addItem("Gentoo") combo.move(50, 50) self.lbl.move(50, 150) combo.activated[str].connect(self.onActivated) self.setGeometry(300, 300, 600, 400) self.setWindowTitle("QComboBox") self.show()
class TLoginWindow(QWidget, QtCore.QObject): def __init__(self): super().__init__() self.resize(300,300) #输入个人信息 label_name=QLabel("请输入姓名") self.edit_name=QLineEdit() #文本标签 label_pos=QLabel("请选择测试项目") label_pos.resize(20,20) #下拉选择框 self.cbox_pos=QComboBox(self) self.cbox_pos.move(100,50) self.cbox_pos.addItem('仰卧起坐') self.cbox_pos.addItem('俯卧撑') self.cbox_pos.addItem('引体向上') #开始测试按钮 self.start_button = QPushButton("开始测试") # button1.clicked.connect(self.start) #倒计时功能 init = 60 self.lcd_cntDown=QLCDNumber() self.lcd_cntDown.display(init) #布局 layout =QVBoxLayout(self) layout.addWidget(label_name) layout.addWidget(self.edit_name) layout.addWidget(label_pos) layout.addWidget(self.cbox_pos) layout.addWidget(self.start_button) layout.addWidget(self.lcd_cntDown) self.setLayout(layout)
def initUI(self): self.lbl = QLabel('中国', self) self.lbl.move(50, 150) combo = QComboBox(self) combo.addItem('中国') combo.addItem('美国') combo.addItem('法国') combo.addItem('德国') combo.addItem('俄罗斯') combo.addItem('澳大利亚') combo.move(50, 50) combo.activated[str].connect(self.onActivated) combo1 = QComboBox(self) combo1.addItem('Item1') combo1.addItem('Item2') combo1.addItem('Item3') combo1.move(200, 50) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QComboBox控件') self.show()
def __init__(self): super().__init__() self.resize(300, 300) #输入个人信息 label1 = QLabel("请输入姓名") name = QLineEdit() #文本标签 label2 = QLabel("请选择测试项目") label2.resize(20, 20) #下拉选择框 cb = QComboBox(self) cb.move(100, 50) cb.addItem('仰卧起坐') cb.addItem('俯卧撑') cb.addItem('引体向上') #开始 结束测试按钮 button1 = QPushButton("开始测试") button1.clicked.connect(self.start) #倒计时功能 self.a = 60 self.clock = QLCDNumber() self.clock.display(self.a) #布局 layout = QVBoxLayout(self) layout.addWidget(label1) layout.addWidget(name) layout.addWidget(label2) layout.addWidget(cb) layout.addWidget(button1) layout.addWidget(self.clock) self.setLayout(layout)
window.setGeometry(100, 50, 1750, 900) window.setFixedSize(1750, 900) # window.setMaximumWidth(1700) # # window.setMaximumHeight(900) # window.setMinimumWidth(1500) # window.setMinimumHeight(900) serifFont = QFont("Times", 12, QFont.Bold) functionlabel = QLabel(window) functionlabel.setText("Please Select The Transistor You Want Highlighted") functionlabel.setFont(serifFont) functionlabel.move(640, 30) transistorlist = QComboBox(window) transistorlist.move(800, 70) transistorlist.addItem("None") transistorlist.addItem("M1") transistorlist.addItem("M2") transistorlist.addItem("M3") transistorlist.addItem("M4") transistorlist.addItem("M5") transistorlist.addItem("M6") lbl = QLabel(window) lbl.setGeometry(100, 120, 1536, 761) def showimage(): # lbl.clear() selectedtran = transistorlist.currentText()
import sys from PySide2.QtWidgets import QApplication, QMainWindow, QComboBox, QLabel aplicacao = QApplication(sys.argv) janela = QMainWindow() janela.setGeometry(100, 50, 300, 200) janela.setWindowTitle("Primeira Janela") label = QLabel("Opção selecionada", janela) label.move(100, 60) label.resize(100, 30) resultado = QLabel("", janela) resultado.move(100, 90) resultado.resize(100, 30) lista_suspensa = QComboBox(janela) lista_suspensa.move(100, 30) lista_suspensa.resize(100, 20) lista_suspensa.addItem("Opção 1") lista_suspensa.addItems(["Opção 2", "Opção 3", "Opção 4"]) def onCurrentTextChanged(): resultado.setText(lista_suspensa.currentText()) lista_suspensa.currentTextChanged.connect(onCurrentTextChanged) onClickComboBox() janela.show() aplicacao.exec_()
class Main(QMainWindow): send = Signal() play = Signal(str, int) stop = Signal() get = Signal() channelIdx = Signal(int) def __init__(self): super().__init__() self.setWindowTitle('Test Window') self.setGeometry(200, 300, 400, 200) # self.TcpClient = TcpClient(('127.0.0.1', 10000)) # self.TcpClient.start() self.qb = QComboBox(self) self.qb.resize(250, 28) self.qb.move(10, 11) self.btnGet = QPushButton('Get', self) self.btnGet.move(260, 10) self.qb1 = QComboBox(self) self.qb1.resize(100, 28) self.qb1.move(10, 50) self.channel = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [14, 15]] self.qb1.addItems( ['1,2', '3,4', '5,6', '7,8', '9,10', '11,12', '13,14', '15,16']) self.btnOpen = QPushButton('Open', self) self.btnOpen.move(10, 90) self.btnPlay = QPushButton('Play', self) self.btnPlay.move(110, 90) self.btnStop = QPushButton('Stop', self) self.btnStop.move(210, 90) self.Player = Player() self.play.connect(self.Player.play) self.stop.connect(self.Player.stop) self.btnOpen.clicked.connect(self.showDialog) self.btnPlay.clicked.connect(self.playFile) self.btnStop.clicked.connect(self.Player.stop) self.btnGet.clicked.connect(self.Player.get_devices) self.Player.audio_devices.connect(self.updateDevices) self.qb.currentIndexChanged.connect(self.changeDevice) self.qb1.currentIndexChanged.connect(self.changeChannel) self.channelIdx.connect(self.Player.changeChannel) self.Player.start() self.deviceNum = 0 self.asioChannel = [0, 1] self.show() def showDialog(self): self.file = QFileDialog.getOpenFileName(self, 'Open file', './') print(self.file[0]) def changeChannel(self): idx = self.qb1.currentIndex() self.asioChannel = self.channel[idx] self.channelIdx.emit(idx) def changeDevice(self): self.deviceNum = self.qb.currentIndex() @Slot(list) def updateDevices(self, devices): print(devices) self.qb.clear() self.qb.addItems(devices) def click(self): self.send.emit() def playFile(self): print('play') if self.file: self.play.emit(self.file[0], self.deviceNum)
class QtOpticalflowInterfaceCloud(QWidget): PREVIEW = [ "no preview", "print fps", "image (default)", "image+fps", "print+image+fps", "print+image" ] MODE = [ "stream", "video", ] ESTIMATION = [ "no computing estimation", "simple estimate", "complete estimation (video mode only)", ] os.chdir("../modules") VISION_MODULES = glob.glob("*.py") os.chdir("../solutions") def __init__(self): QWidget.__init__(self) self.salutation_lbl = QLabel( 'Welcome to Opticalflow utilise Graphic interface', self) self.compute_location_text = QLabel("compute location:", self) self.compute_location = QComboBox(self) self.setMinimumSize(400, 400) self.setWindowTitle('GUI opticalflow utilities') self.ip_text = QLabel("ip:", self) self.ip = QLineEdit(self) self.port_text = QLabel("port:", self) self.port = QLineEdit(self) self.width_text = QLabel("width:", self) self.width = QLineEdit(self) self.height_text = QLabel("height:", self) self.height = QLineEdit(self) self.save_text = QLabel("save:", self) self.save = QCheckBox(self) self.save_extension = QLabel("", self) self.name_save = QLineEdit(self) self.fps_text = QLabel("fps:", self) self.fps = QLineEdit(self) self.preview_text = QLabel("preview:", self) self.preview = QComboBox(self) self.mode_text = QLabel("mode:", self) self.mode = QComboBox(self) self.video_file = QLineEdit(self) self.estimation_text = QLabel("estimation:", self) self.estimation = QComboBox(self) self.module_vision_text = QLabel("vision module:", self) self.module_vision = QComboBox(self) self.validation_button = QPushButton(self) self.set_buttons() def set_buttons(self): self.salutation_lbl.move(50, 5) # offset the first control 5px self.compute_location_text.move(5, 35) self.compute_location.move(120, 30) self.compute_location.addItems(["local", "cloud"]) self.compute_location.currentIndexChanged.connect(self.cloud_ip) self.ip_text.move(5, 70) self.ip.setText("localhost") self.ip.move(110, 70) self.ip.hide() self.ip_text.hide() self.port_text.move(5, 105) self.port.setText("10000") self.port.move(110, 105) self.port.hide() self.port_text.hide() self.width_text.move(5, 140) self.width.setText("320") self.width.move(110, 140) self.height_text.move(5, 175) self.height.setText("240") self.height.move(110, 175) self.save_text.move(5, 205) self.save.move(110, 205) self.save.clicked.connect(self.fps_show) self.name_save.move(130, 200) self.name_save.setText("file") self.name_save.hide() self.save_extension.move(260, 205) self.save_extension.hide() self.fps_text.move(5, 240) self.fps.move(110, 240) self.fps.setText("20") self.fps_text.hide() self.fps.hide() self.preview.addItems(self.PREVIEW) self.preview.move(110, 275) self.preview_text.move(5, 275) self.mode.addItems(self.MODE) self.mode.move(110, 310) self.mode_text.move(5, 310) self.mode.currentIndexChanged.connect(self.video_mode) self.video_file.move(190, 310) self.video_file.setText("videos_to_computed_videos/video_list_example") self.video_file.hide() self.estimation.addItems(self.ESTIMATION) self.estimation.move(110, 345) self.estimation_text.move(5, 345) self.module_vision.addItems(self.VISION_MODULES) self.module_vision.move(110, 375) self.module_vision_text.move(5, 375) self.validation_button.move(5, 400) self.validation_button.setText("clicked") self.validation_button.clicked.connect(self.reset_window) def get_value(self): return self def reset_window(self): copyfile("../modules/" + self.module_vision.currentText(), "./realtime/vision_module.py") if self.compute_location.currentText() == "cloud": self.streaming = Streaming(FieldValue(self)) elif self.mode.currentIndex() == 0: self.streaming = OpticalRealtime(FieldValue(self)) elif self.mode.currentIndex() == 1: self.streaming = VideoList(FieldValue(self)) self.streaming.run() def fps_show(self): if self.save.isChecked(): self.fps_text.show() self.fps.show() self.name_save.show() self.save_extension.show() else: self.fps_text.hide() self.fps.hide() self.name_save.hide() self.save_extension.hide() def cloud_ip(self): if self.compute_location.currentText() == "local": self.ip.hide() self.ip_text.hide() self.port.hide() self.port_text.hide() else: self.ip.show() self.ip_text.show() self.port.show() self.port_text.show() def video_mode(self): if self.mode.currentText() == "video": self.video_file.show() else: self.video_file.hide() def __delete__(self): pass
def ui_components(self): font = QFont("Roboto", 16) title_label = QLabel("Convert currency:", self) title_label.move(7, 27) title_label.setFont(font) title_label.adjustSize() to_be_converted = QLineEdit(self) to_be_converted.setPlaceholderText("Amount") to_be_converted.setFont(font) to_be_converted.move(7, 67) to_be_converted.setFixedWidth(230) valid = QDoubleValidator() to_be_converted.setValidator(valid) converted = QLineEdit(self) converted.setPlaceholderText("Converted Amount") converted.isEnabled = False converted.move(7, 107) converted.setFixedWidth(230) converted.setFont(font) converted.setValidator(valid) currency_list_1 = QComboBox(self) currency_list_1.addItem("USD") currency_list_1.addItem("TND") currency_list_1.addItem("EUR") currency_list_1.move(260, 66) currency_list_2 = QComboBox(self) currency_list_2.addItem("USD") currency_list_2.addItem("TND") currency_list_2.addItem("EUR") currency_list_2.move(260, 100) convert_btn = QPushButton("Convert", self) convert_btn.move(260, 140) menubar = QMenuBar(self) Info = menubar.addMenu("Info") exchange = Info.addAction("Exchange rates") exchange.triggered.connect(self.open_exchange_rates) def convertor(): if str(currency_list_1.currentText()) == "USD" or str( currency_list_2.currentText()) == "USD": # ============== USD AND TND ================== if str(currency_list_2.currentText()) == "TND": rate_usd_tnd = Exchanges().usd_tnd() converted_amount = float( to_be_converted.text()) * float(rate_usd_tnd) if to_be_converted != '': converted.setText(str(converted_amount)) if str(currency_list_1.currentText()) == "TND": rate_usd_tnd = Exchanges().usd_tnd() converted_amount = float(to_be_converted.text()) * float( 1 / rate_usd_tnd) if to_be_converted != '': converted.setText(str(converted_amount)) # =============== EUR AND USD ================= if str(currency_list_2.currentText()) == "EUR": rate_usd_eur = Exchanges().usd_eur() converted_amount = float( to_be_converted.text()) * float(rate_usd_eur) if to_be_converted != '': converted.setText(str(converted_amount)) if str(currency_list_1.currentText()) == "EUR": rate_usd_eur = Exchanges().usd_eur() converted_amount = float(to_be_converted.text()) * float( 1 / rate_usd_eur) if to_be_converted != '': converted.setText(str(converted_amount)) if (currency_list_1.currentText()) == "TND" or ( currency_list_2.currentText()) == "TND": if str(currency_list_2.currentText()) == "EUR": rate_tnd_eur = Exchanges().tnd_eur() converted_amount = float( to_be_converted.text()) * float(rate_tnd_eur) if to_be_converted != '': converted.setText(str(converted_amount)) if str(currency_list_1.currentText()) == "EUR": rate_tnd_eur = Exchanges().tnd_eur() converted_amount = float(to_be_converted.text()) * float( 1 / rate_tnd_eur) if to_be_converted != '': converted.setText(str(converted_amount)) convert_btn.clicked.connect(convertor)
class mainWindow(QObject): signalRun = Signal(SpiderThread) signalRunApi = Signal(apiTester) def __init__(self): QObject.__init__(self) # must init parent QObject,if you want to use signal self.widget = QWidget() self.ipLabel = QLabel(self.widget) self.thread = QThread() self.worker = Worker() self.worker.moveToThread(self.thread) self.man = SpiderThread() self.api = apiTester() # 1 2:loop 3: time self.testStatus = [False,1,0,"ip","mac"] # advance config self.findCoreStop = True self.cleanCacheSet = False self.useApiTest = False self.showTestProgress = True self.saveTestLog = False self.saveLogPath = "" self.chromePath = "" self.showChrome = False self.coreDumpPath = "" # ui form self.passwordLabel = QLabel(self.widget) self.ipLineEdit = QLineEdit(self.widget) self.passwordLineEdit = QLineEdit(self.widget) self.startBtn = QPushButton(self.widget) self.stopBtn = QPushButton(self.widget) self.messageBox = QTextEdit(self.widget) self.messageBox.setReadOnly(True) self.userLabel = QLabel(self.widget) self.userLineEdit = QLineEdit(self.widget) self.intervalLabel = QLabel(self.widget) self.intervalSpinBox = QSpinBox(self.widget) self.loopLabel = QLabel(self.widget) self.loopSpinBox = QSpinBox(self.widget) self.intervalSpinBox.setRange(0,9999) self.loopSpinBox.setRange(1,9999) self.radioReboot = QRadioButton(self.widget) self.radioProvision = QRadioButton(self.widget) self.radioFactory = QRadioButton(self.widget) # self.apiCheckBox = QCheckBox(self.widget) self.menu = QMenu() self.gxpAction = QAction("Classic UI") self.grp2602Action = QAction("Ant Design UI") self.gxpAction.setCheckable(True) self.grp2602Action.setCheckable(True) self.menu.addAction(self.gxpAction) self.menu.addAction(self.grp2602Action) self.webLabel = QLabel(self.widget) self.webBtn = QPushButton(self.widget) self.webBtn.setMenu(self.menu) self.clearBtn = QPushButton(self.widget) self.messageList = deque() self.timer = QTimer() self.advanceBtn = QPushButton(self.widget) self.infoLabel = QLabel(self.widget) # provision widget self.provWidget = QWidget(self.widget) self.ver1Label = QLabel(self.provWidget) self.ver2Label = QLabel(self.provWidget) self.ver3Label = QLabel(self.provWidget) self.ver1LineEdit = QLineEdit(self.provWidget) self.ver2LineEdit = QLineEdit(self.provWidget) self.ver3LineEdit = QLineEdit(self.provWidget) self.dir1Label = QLabel(self.provWidget) self.dir2Label = QLabel(self.provWidget) self.dir3Label = QLabel(self.provWidget) self.dir1LineEdit = QLineEdit(self.provWidget) self.dir2LineEdit = QLineEdit(self.provWidget) self.dir3LineEdit = QLineEdit(self.provWidget) self.radioHttp = QRadioButton(self.provWidget) self.radioHttps = QRadioButton(self.provWidget) self.radioTftp = QRadioButton(self.provWidget) self.radioFtp = QRadioButton(self.provWidget) self.radioFtps = QRadioButton(self.provWidget) self.radioWindow = QRadioButton(self.provWidget) # advance widget self.advanceWidget = QWidget() self.checkCoreBox = QCheckBox(self.advanceWidget) self.cleanCache = QCheckBox(self.advanceWidget) self.checkSaveLogBox = QCheckBox(self.advanceWidget) self.selectDirBtn = QPushButton(self.advanceWidget) self.saveDirLabel = QLabel(self.advanceWidget) self.saveDirLabel.setStyleSheet("background:white") self.checkProgressBox = QCheckBox(self.advanceWidget) self.advanceOkBtn = QPushButton(self.advanceWidget) self.selectChromeBtn = QPushButton(self.advanceWidget) self.chromePathLabel = QLabel(self.advanceWidget) self.chromePathLabel.setStyleSheet("background:white") self.checkShowChromeBox = QCheckBox(self.advanceWidget) self.chromeLabel = QLabel(self.advanceWidget) self.pcapLabel = QLabel(self.advanceWidget) self.apiCheckBox = QCheckBox(self.advanceWidget) self.corePathLabel = QLabel(self.advanceWidget) self.corePathLabel.setStyleSheet("background:white") self.corePathBtn = QPushButton(self.advanceWidget) self.interfaceMenu = QComboBox(self.advanceWidget) self.interfaceMenu.addItem('Default') self.aiOptionBox= QCheckBox(self.advanceWidget) a = IFACES print(a) for i in a.keys(): print(a[i].description) self.interfaceMenu.addItem(a[i].description) # connect singal and slot self.startBtn.clicked.connect(self.clickedStarBtn) self.radioProvision.clicked.connect(self.clickedProvision) self.radioReboot.clicked.connect(self.clickedOthers) self.radioFactory.clicked.connect(self.clickedOthers) self.stopBtn.clicked.connect(self.clickedStopBtn) self.grp2602Action.triggered.connect(self.clickedGrp2602) self.gxpAction.triggered.connect(self.clickedGxpType) self.timer.timeout.connect(self.updateMessage) self.apiCheckBox.stateChanged.connect(self.apiTestBoxCheck) self.clearBtn.clicked.connect(self.clickedClearBtn) self.advanceBtn.clicked.connect(self.clickedAdvanceBtn) self.advanceOkBtn.clicked.connect(self.clickedAdvanceOkBtn) self.checkSaveLogBox.stateChanged.connect(self.saveLogBoxCheck) self.selectChromeBtn.clicked.connect(self.clickedSelectChromeBtn) self.selectDirBtn.clicked.connect(self.clickedSelectDirBtn) self.corePathBtn.clicked.connect(self.clickedCorePathBtn) self.worker.signalJobEnd.connect(self.slotTestStoped) self.worker.apiTestFinished.connect(self.slotTestStoped) self.signalRun.connect(self.worker.dowork) self.signalRunApi.connect(self.worker.doworkApi) # self.man.signalUpdateMessage.connect(self.pushMessage) def setupUI(self): # set text content /value self.widget.setWindowTitle("自动重启升降级测试工具") self.ipLabel.setText("初始IP:") self.passwordLabel.setText("密码:") self.startBtn.setText("开始测试") self.stopBtn.setText("停止测试") self.userLabel.setText("用户名:") self.intervalLabel.setText("间隔时间:") self.loopLabel.setText("测试次数:") self.intervalSpinBox.setValue(130) self.radioFactory.setText("恢复出厂") self.radioProvision.setText("升降级") self.radioReboot.setText("重启") self.ver1Label.setText("版本 1:") self.ver2Label.setText("版本 2:") self.ver3Label.setText("版本 3:") self.dir1Label.setText("路径 1:") self.dir2Label.setText("路径 2:") self.dir3Label.setText("路径 3:") self.radioHttp.setText("Http") self.radioHttps.setText("Https") self.radioTftp.setText("Tftp") self.radioFtp.setText("Ftp") self.radioFtps.setText("Ftps") self.apiCheckBox.setText("使用API测试,配置CoreDump下载路径") self.webLabel.setText("网页类型:") self.webBtn.setText("请选择UI类型") self.clearBtn.setText("清空输入") self.advanceWidget.setWindowTitle("高级设置") self.advanceBtn.setText("高级设置") self.checkCoreBox.setText("发现Core Dump时停止测试") self.cleanCache.setText("清除页面cache") self.checkSaveLogBox.setText("保存测试日志") self.selectDirBtn.setText("浏览") self.checkProgressBox.setText("显示底部状态条") self.advanceOkBtn.setText("OK") self.checkShowChromeBox.setText("测试时显示Chrome浏览器") self.selectChromeBtn.setText("浏览") self.chromeLabel.setText("Chrome浏览器路径") self.infoLabel.setText("未开始测试") self.pcapLabel.setText("Net Interface") self.corePathBtn.setText("浏览") self.radioWindow.setText("网页拖拽文件") # self.aiOptionBox.setText("AI") #init value self.saveDirLabel.hide() self.selectDirBtn.hide() self.gxpAction.setChecked(True) self.radioReboot.click() self.radioHttp.click() self.stopBtn.setEnabled(False) self.passwordLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit) # set position------------------------------- xPos = 20 yPos = 30 colum2 = xPos +200 # line 1 self.ipLabel.move(xPos,yPos) self.intervalLabel.move(colum2,yPos) self.intervalSpinBox.move(colum2+60,yPos-2) self.ipLineEdit.move(xPos+50,yPos-2) # line 2 line2 = yPos +40 self.passwordLabel.move(xPos,line2) self.passwordLineEdit.move(xPos+50,line2-2) self.loopLabel.move(colum2,line2) self.loopSpinBox.move(colum2+60,line2-2) # line3 line3 = yPos +80 self.userLabel.move(xPos,line3) self.userLineEdit.move(xPos+50,line3-2) self.radioReboot.move(colum2,line3) self.radioFactory.move(colum2+60,line3) self.radioProvision.move(colum2,line3+30) self.webLabel.move(xPos,line3+40) self.webBtn.move(xPos+60,line3+35) # provWidget self.provWidget.resize(400,130) self.provWidget.move(xPos,line3+70) spaceY = 30 x = 0 y = 0 cl = 200 self.ver1Label.move(x,y) self.ver1LineEdit.move(x+50,y) self.ver2Label.move(x,y+spaceY) self.ver2LineEdit.move(x+50,y+spaceY) self.ver3Label.move(x,y+spaceY*2) self.ver3LineEdit.move(x+50,y+spaceY*2) self.dir1Label.move(cl,y) self.dir1LineEdit.move(cl+50,y) self.dir2Label.move(cl,y+spaceY) self.dir2LineEdit.move(cl+50,y+spaceY) self.dir3Label.move(cl,y+spaceY*2) self.dir3LineEdit.move(cl+50,y+spaceY*2) self.radioHttp.move(x,y+spaceY*3) self.radioHttps.move(x+50,y+spaceY*3) self.radioTftp.move(x+110,y+spaceY*3) self.radioFtp.move(x+160,y+spaceY*3) self.radioFtps.move(x+210,y+spaceY*3) self.radioWindow.move(x+265,y+spaceY*3) # advance widget self.advanceWidget.resize(300,400) x = 20 y = 20 space = 30 self.checkCoreBox.move(x,y) self.cleanCache.move(x,y+space) self.checkProgressBox.move(x,y+space*2) self.checkShowChromeBox.move(x,y+space*3) self.apiCheckBox.move(x,y+space*4) self.corePathBtn.move(x-2,y+space*5-8) self.corePathLabel.move(x+35,y+space*5-8) y += 40 self.chromeLabel.move(x,y+space*4+10) self.selectChromeBtn.move(x-2,y+space*5) self.chromePathLabel.move(x+35,y+space*5+2) self.checkSaveLogBox.move(x,y+space*6+10) self.selectDirBtn.move(x-2,y+space*7) self.saveDirLabel.move(x+35,y+space*7+2) self.advanceOkBtn.move(x+170,y+space*10+10) self.interfaceMenu.move(x-5,y+space*8+10) self.pcapLabel.move(x,y+space*8-2) # self.aiOptionBox.move(x, y+space*9+8) # set size self.messageBox.resize(373,155) # self.widget.resize(410,400) self.loopSpinBox.resize(60,25) self.intervalSpinBox.resize(60,25) self.webBtn.resize(100,25) self.saveDirLabel.resize(185,22) self.selectDirBtn.resize(32,24) self.selectChromeBtn.resize(32,24) self.chromePathLabel.resize(185,22) self.infoLabel.resize(400, 25) self.corePathBtn.resize(32,24) self.corePathLabel.resize(185,22) # self.provWidget.hide() self.changePosition(True) self.widget.show() self.loadCache() # ----------------end of setupUI --------------------- def changePosition(self,hide): xPos = 20 if hide: buttonLine = 200 self.widget.resize(420,415) else: buttonLine = 310 self.widget.resize(420,524) self.startBtn.move(xPos,buttonLine) self.stopBtn.move(xPos+90,buttonLine) self.clearBtn.move(xPos+180,buttonLine) self.advanceBtn.move(xPos+270,buttonLine) self.messageBox.move(xPos,buttonLine+30) boxH = self.messageBox.height() self.infoLabel.move(xPos,buttonLine+boxH+35) def setItemEnable(self,enable): self.provWidget.setEnabled(enable) self.ipLineEdit.setEnabled(enable) self.passwordLineEdit.setEnabled(enable) self.userLineEdit.setEnabled(enable) self.intervalSpinBox.setEnabled(enable) self.loopSpinBox.setEnabled(enable) self.radioFactory.setEnabled(enable) self.radioReboot.setEnabled(enable) self.radioProvision.setEnabled(enable) self.advanceBtn.setEnabled(enable) self.startBtn.setEnabled(enable) self.clearBtn.setEnabled(enable) if self.useApiTest: self.webBtn.setEnabled(False) else: self.webBtn.setEnabled(enable) self.stopBtn.setEnabled(not enable) def outputError(self,str): appstr = "<span style=\"color:red\">" appstr += str + "</span>" self.messageBox.append(appstr) def outputWarning(self,str): appstr = "<span style=\"color:orange\">" appstr += str + "</span>" self.messageBox.append(appstr) def loadCache(self): file = QFile("cache") if not file.open(QIODevice.ReadOnly | QIODevice.Text): return inStream = QTextStream(file) # ip self.ipLineEdit.setText(inStream.readLine()) # passwordLabel self.passwordLineEdit.setText(inStream.readLine()) # user self.userLineEdit.setText(inStream.readLine()) # ver1 self.ver1LineEdit.setText(inStream.readLine()) self.dir1LineEdit.setText(inStream.readLine()) # ver2 self.ver2LineEdit.setText(inStream.readLine()) self.dir2LineEdit.setText(inStream.readLine()) # ver3 self.ver3LineEdit.setText(inStream.readLine()) self.dir3LineEdit.setText(inStream.readLine()) self.intervalSpinBox.setValue(int(inStream.readLine())) self.loopSpinBox.setValue(int(inStream.readLine())) # web type button webType = inStream.readLine() if webType == "gxpAction": self.grp2602Action.setChecked(False) self.gxpAction.setChecked(True) self.webBtn.setText(self.gxpAction.text()) else: self.grp2602Action.setChecked(True) self.gxpAction.setChecked(False) self.webBtn.setText(self.grp2602Action.text()) testType = inStream.readLine() if testType == "reboot": self.radioReboot.setChecked(True) elif testType == "provision": self.radioProvision.setChecked(True) self.changePosition(False) self.provWidget.show() else: self.radioFactory.setChecked(True) serverType = inStream.readLine() if serverType == "Http": self.radioHttp.setChecked(True) elif serverType == "Https": self.radioHttps.setChecked(True) elif serverType == "Tftp": self.radioTftp.setChecked(True) elif serverType == "Ftp": self.radioFtp.setChecked(True) elif serverType == "Ftps": self.radioFtps.setChecked(True) else: self.radioWindow.setChecked(True) if inStream.readLine() == "True": self.findCoreStop = True else: self.findCoreStop = False if inStream.readLine() == "True": self.cleanCacheSet = True else: self.cleanCacheSet = False if inStream.readLine() == "True": self.useApiTest = True self.webBtn.setEnabled(False) else: self.useApiTest = False self.corePathBtn.hide() self.corePathLabel.hide() if inStream.readLine() == "True": self.showTestProgress = True else: self.showTestProgress = False self.infoLabel.hide() if inStream.readLine() == "True": self.showChrome = True else: self.showChrome = False self.chromePath = inStream.readLine() if inStream.readLine() == "True": self.saveTestLog = True else: self.saveTestLog = False self.saveLogPath = inStream.readLine() self.coreDumpPath = inStream.readLine() file.close() def saveCache(self): file = QFile("cache") if not file.open(QIODevice.WriteOnly): return content = self.ipLineEdit.text() + "\n" content += self.passwordLineEdit.text() + "\n" content += self.userLineEdit.text() + "\n" content += self.ver1LineEdit.text() + "\n" content += self.dir1LineEdit.text() + "\n" content += self.ver2LineEdit.text() + "\n" content += self.dir2LineEdit.text() + "\n" content += self.ver3LineEdit.text() + "\n" content += self.dir3LineEdit.text() + "\n" content += str(self.intervalSpinBox.value()) + "\n" content += str(self.loopSpinBox.value()) + "\n" if self.gxpAction.isChecked(): content += "gxpAction\n" else: content += "grp2602Action\n" if self.radioReboot.isChecked(): content += "reboot\n" elif self.radioProvision.isChecked(): content += "provision\n" else: content += "factory\n" if self.radioHttp.isChecked(): content += "Http\n" elif self.radioHttps.isChecked(): content += "Https\n" elif self.radioTftp.isChecked(): content += "Tftp\n" elif self.radioFtp.isChecked(): content += "Ftp\n" elif self.radioFtps.isChecked(): content += "Ftps\n" else : content += "Window\n" content += str(self.findCoreStop) + "\n" content += str(self.cleanCacheSet) + "\n" content += str(self.useApiTest) + "\n" content += str(self.showTestProgress) + "\n" content += str(self.showChrome) + "\n" content += self.chromePath +"\n" content += str(self.saveTestLog) +"\n" content += self.saveLogPath +"\n" content += self.coreDumpPath +"\n" byteArr = bytes(content,"utf-8") file.write(QByteArray(byteArr)) file.close() def checkBeforeRun(self): containError = False #---------check Ip address-------------- if self.ipLineEdit.text() == "": containError = True self.outputError("IP地址不能为空!") else: pattern = re.compile("^((1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)){3}((1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9]))$") if not pattern.search(self.ipLineEdit.text()): containError = True self.outputError("IP地址格式错误,检查是否含有多余空格!(仅支持IPV4)") #------------------------ if self.passwordLineEdit.text() == "": containError = True self.outputError("密码不能为空!") if self.userLineEdit.text() == "": containError = True self.outputError("用户名不能为空!") if self.intervalSpinBox.value() <= 40: self.outputWarning("间隔时间过短,可能对测试造成影响") if not self.radioProvision.isChecked() and not self.radioReboot.isChecked() and \ not self.radioFactory.isChecked(): containError = True self.outputError("必须选择测试方式(重启,升降级,恢复出厂)") # check provision ---------- if self.radioProvision.isChecked(): if self.ver1LineEdit.text() == "" or self.ver2LineEdit.text() == "" or \ self.dir1LineEdit.text() == "" or self.dir2LineEdit.text() == "": containError = True self.outputError("升降级测试至少填上前两个版本及其路径") bin_name = "" if os.path.exists(os.path.abspath("config.ini") ): f = open(os.path.abspath("config.ini") , "r") line = f.readline() while line: option = line.split("=") if option[0] == "firmbinname": if option[1].strip('"') != "": filenamebin = option[1].strip() bin_name = filenamebin.strip('"') pass line = f.readline() f.close() filename = os.path.join(self.dir1LineEdit.text(), bin_name) if not os.path.exists(filename) and self.radioWindow.isChecked(): containError = True self.outputError("firmware1 文件不存在!" + filename) filename = os.path.join(self.dir2LineEdit.text(), bin_name) if not os.path.exists(filename) and self.radioWindow.isChecked(): containError = True self.outputError("firmware2 文件不存在!" + filename) filename = os.path.join(self.dir3LineEdit.text(), bin_name) if self.ver3LineEdit.text() != "" and self.dir3LineEdit.text() == "": containError = True self.outputError("填写了版本3,但对应路径为空!") if self.dir3LineEdit.text() != "" and self.ver3LineEdit.text() == "": containError = True self.outputError("填写了路径3,但对应版本为空!") elif self.dir3LineEdit.text() != "" and self.radioWindow.isChecked() and not os.path.exists(filename): containError = True self.outputError("firmware3 文件不存在!" + filename) if not self.radioFtp.isChecked() and not self.radioFtps.isChecked() and \ not self.radioHttp.isChecked() and not self.radioHttps.isChecked() and \ not self.radioTftp.isChecked() and not self.radioWindow.isChecked(): containError = True self.outputError("升降级测试必须选择服务器类型(Tftp,Ftp,Ftps,Http,Https)") return containError def startTest(self): ip = self.ipLineEdit.text() passwd = self.passwordLineEdit.text() username = self.userLineEdit.text() ptime = self.intervalSpinBox.value() loop = self.loopSpinBox.value() modelType = self.webBtn.text() if self.gxpAction.isChecked(): device_type = "GXP21XX" elif self.grp2602Action.isChecked(): device_type = "GRP260X" if self.radioReboot.isChecked(): task_type = "reboot" elif self.radioProvision.isChecked(): task_type = "provision" text_ver1 = self.ver1LineEdit.text() text_ver2 = self.ver2LineEdit.text() text_ver3 = self.ver3LineEdit.text() text_dir1 = self.dir1LineEdit.text() text_dir2 = self.dir2LineEdit.text() text_dir3 = self.dir3LineEdit.text() prov_dict = {"ver1": text_ver1.strip(), "dir1": text_dir1.strip(), "ver2": text_ver2.strip(), "dir2": text_dir2.strip(), "ver3": text_ver3.strip(), "dir3": text_dir3.strip()} if self.radioHttp.isChecked(): self.man.update_prov_setting("HTTP", prov_dict) elif self.radioHttps.isChecked(): self.man.update_prov_setting("HTTPS", prov_dict) elif self.radioTftp.isChecked(): self.man.update_prov_setting("TFTP", prov_dict) elif self.radioFtp.isChecked(): self.man.update_prov_setting("FTP", prov_dict) elif self.radioFtps.isChecked(): self.man.update_prov_setting("FTPS", prov_dict) elif self.radioWindow.isChecked(): self.man.update_prov_setting("browser", prov_dict) else: task_type = "reset" coredump_stop = True headless_flag = False clean_cache = False if self.checkCoreBox.isChecked() == False: self.messageBox.append("Find core dump will not stop") coredump_stop = False if self.cleanCache.isChecked() == True: clean_cache = True if self.checkShowChromeBox.isChecked() == True or self.radioWindow.isChecked() == True: headless_flag = False else: headless_flag = True # ai_mode = False # if self.aiOptionBox.isChecked() == True: # ai_mode = True browser_path = "" if self.chromePathLabel.text() != "": browser_path = self.chromePathLabel.text() self.testStatus = [True,1,0,"ip",""] print(self.interfaceMenu.currentText()) self.man.setStatus(self.testStatus) self.man.setMessageList(self.messageList) self.man.update_setting(ip.strip(), username.strip(), passwd.strip(), device_type, \ task_type, loop, ptime, coredump_stop, headless_flag, browser_path, \ clean_cache, self.interfaceMenu.currentText(), False) def startApiTest(self): ip = self.ipLineEdit.text() passwd = self.passwordLineEdit.text() username = self.userLineEdit.text() ptime = self.intervalSpinBox.value() loop = self.loopSpinBox.value() testType = "Reboot" if self.radioProvision.isChecked(): testType = "Provision" self.api.setValue(ip,username,passwd,ptime,loop,testType) v1 = self.ver1LineEdit.text() v2 = self.ver2LineEdit.text() v3 = self.ver3LineEdit.text() d1 = self.dir1LineEdit.text() d2 = self.dir2LineEdit.text() d3 = self.dir3LineEdit.text() self.api.setVersion(v1,v2,v3,d1,d2,d3) self.api.setTestStatus(self.testStatus,self.messageList,self.coreDumpPath) if self.radioHttp.isChecked(): self.api.setServerType("http") elif self.radioHttps.isChecked(): self.api.setServerType("https") elif self.radioTftp.isChecked(): self.api.setServerType("tftp") elif self.radioFtp.isChecked(): self.api.setServerType("ftp") else: #self.radioFtps.isChecked() self.api.setServerType("ftps") self.api.setFoundCoreStop(self.findCoreStop) # slot --------------------------------- def apiTestBoxCheck(self,state): if state == 2: self.corePathBtn.show() self.corePathLabel.show() else: self.corePathBtn.hide() self.corePathLabel.hide() def clickedCorePathBtn(self): dir = QFileDialog.getExistingDirectory(self.advanceWidget,"选择Core Dump存放路径","/home") if dir != "": self.corePathLabel.setText(dir) self.coreDumpPath = dir def clickedSelectDirBtn(self): dir = QFileDialog.getExistingDirectory(self.advanceWidget,"选择日志存放路径","/home") if dir != "": self.saveDirLabel.setText(dir) self.saveLogPath = dir def clickedSelectChromeBtn(self): fileName = QFileDialog.getOpenFileName(self.advanceWidget,"选择谷歌浏览器","/home","Chrome (*.exe)") if fileName != "": self.chromePathLabel.setText(fileName[0]) self.chromePath = fileName[0] def saveLogBoxCheck(self,state): if state == 2: # checked self.selectDirBtn.show() self.saveDirLabel.show() else: self.selectDirBtn.hide() self.saveDirLabel.hide() def clickedAdvanceOkBtn(self): self.findCoreStop = self.checkCoreBox.isChecked() self.cleanCacheSet = self.cleanCache.isChecked() self.useApiTest = self.apiCheckBox.isChecked() self.showTestProgress = self.checkProgressBox.isChecked() self.saveTestLog = self.checkSaveLogBox.isChecked() self.saveLogPath = self.saveDirLabel.text() self.showChrome = self.checkShowChromeBox.isChecked() self.chromePath = self.chromePathLabel.text() self.coreDumpPath = self.corePathLabel.text() if self.useApiTest: self.webBtn.setEnabled(False) self.corePathBtn.show() self.corePathLabel.show() else: self.webBtn.setEnabled(True) self.corePathBtn.hide() self.corePathLabel.hide() if self.showTestProgress: self.infoLabel.show() else: self.infoLabel.hide() self.saveCache() self.advanceWidget.hide() def clickedAdvanceBtn(self): self.advanceWidget.hide() self.checkCoreBox.setChecked(self.findCoreStop) self.cleanCache.setChecked(self.cleanCacheSet) self.apiCheckBox.setChecked(self.useApiTest) self.checkProgressBox.setChecked(self.showTestProgress) self.checkSaveLogBox.setChecked(self.saveTestLog) self.saveDirLabel.setText(self.saveLogPath) self.checkShowChromeBox.setChecked(self.showChrome) self.chromePathLabel.setText(self.chromePath) self.corePathLabel.setText(self.coreDumpPath) self.advanceWidget.show() def slotTestStoped(self): self.testStatus[0] = False self.setItemEnable(True) self.timer.stop() self.updateMessage() self.thread.quit() # save Test log if self.saveTestLog: fileName = time.strftime("%Y_%m_%d.%H_%M_%S.",time.localtime()) if self.radioReboot.isChecked(): fileName += "reboot" elif self.radioProvision: fileName += "provision" else: fileName += "factoryReset" fileName += ".htm" if self.saveLogPath == "": self.outputWarning("日志地址没有设置,无法保存") else: fileName = self.saveLogPath + "\\" + fileName print(fileName) file = QFile(fileName) if not file.open(QIODevice.WriteOnly): self.outputError("打开文件错误,保存日志失败") return byteArr = bytes(self.messageBox.toHtml(),"utf-8") file.write(QByteArray(byteArr)) file.close() def clickedClearBtn(self): self.ipLineEdit.setText("") self.passwordLineEdit.setText("") self.userLineEdit.setText("") self.ver1LineEdit.setText("") self.dir1LineEdit.setText("") self.ver2LineEdit.setText("") self.dir2LineEdit.setText("") self.ver3LineEdit.setText("") self.dir3LineEdit.setText("") def clickedStarBtn(self): if self.checkBeforeRun(): return self.messageBox.clear() self.saveCache() self.messageBox.append("Init Setting...") self.setItemEnable(False) self.timer.start(500) self.thread.start() # deside use what to test if self.useApiTest: if self.radioFactory.isChecked(): self.outputWarning("Api not support Factory Reset, will test as Gxp type web driver") self.clickedGxpType() self.startTest() self.signalRun.emit(self.man) else: self.startApiTest() self.signalRunApi.emit(self.api) else: self.startTest() self.signalRun.emit(self.man) def clickedStopBtn(self): self.stopBtn.setEnabled(False) self.testStatus[0] = False self.man.quit() self.outputWarning("正在停止...") def clickedProvision(self): self.provWidget.show() self.changePosition(False) def clickedOthers(self): self.provWidget.hide() self.changePosition(True) def clickedGxpType(self): self.gxpAction.setChecked(True) self.grp2602Action.setChecked(False) self.webBtn.setText(self.gxpAction.text()) def clickedGrp2602(self): self.gxpAction.setChecked(False) self.grp2602Action.setChecked(True) self.webBtn.setText(self.grp2602Action.text()) def updateMessage(self): while len(self.messageList) >0: info = self.messageList.popleft() self.messageBox.append(info) if self.testStatus[0] == False: self.infoLabel.setText("未开始测试") else: info = "第" + str(self.testStatus[1]) + "次测试 " if self.testStatus[2] > 0: info += "等待:{} 秒".format( self.testStatus[2] ) else: info += "运行中" info += " " + self.testStatus[3] info += " " + self.testStatus[4] self.infoLabel.setText(info)
def setFontBox(self): cbox = QComboBox(self) tables = ("Поиск по нику", "Поиск по телефону", "Поиск по фамилии") cbox.addItems(tables) cbox.move(25, 676) cbox.currentIndexChanged.connect(self.printfel)
class MainWidget(QWidget): # CONSTANTS EMPTY_STRING = "" # TOGGLE BUTTON CONSTANTS BUTTON_CLOSED_ICON_PATH = 'resources/menu_closed_button_icon.png' BUTTON_OPENED_ICON_PATH = 'resources/menu_opened_button_icon.png' TOOGLE_BUTTON_CSS_PROPERTY = "QPushButton {background-color: rgb(1,150,250); border: none ; qproperty-iconSize: 80px}" CURRENT_PATH_LINE_EDIT_PROPERTY = "QLineEdit {background-color: rgba(240, 240, 240, 1);}" TOOGLE_CLOSED_COLOR = "background-color: rgb(1,150,250);" TOOGLE_OPENED_COLOR = "background-color: rgba(44, 53, 57, 0.2);" WHITE = "background-color: rgb(255, 255, 255);" FRAME_BUTTON_STYLE = "background-color: rgb(0, 191, 255); color: rgb(255, 255, 255);" FRAME_LINE_EDIT_STYLE = "background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);" FRAME_LABEL_STYLE = "QLabel { background-color : rgba(44, 53, 57, 0); }" SEARCH_ICON_STYLE = "QPushButton {background-color: rgb(1,150,250);}" BACK_ICON_STYLE = "QPushButton {background-color: rgb(1,150,250);} QPushButton:pressed {background-color: rgb(40,170,250);}" WIDTH = 1440 HEIGHT = 900 # Size of the operations widget buttons OPERATION_BUTTON_WIDTH = 40 OPERATION_BUTTON_HEIGHT = 40 FILES_LIST_VIEW_WIDTH = 820 FILES_LIST_VIEW_HEIGHT = 680 TOGGLE_BUTTON_ANIMATION_DURATION = 200 RIGHT_MENU_ANIMATION_DURATION = 250 # ICONS PATHS # Actions icons ADD_FILE_ICON_PATH = "resources/add_file_icon.png" ADD_DIRECTORY_ICON_PATH = "resources/add_directory_icon.png" COPY_ELEMENT_ICON_PATH = "resources/copy_element_icon.png" MOVE_ELEMENT_ICON_PATH = "resources/move_element_icon.png" DELETE_ELEMENT_ICON_PATH = "resources/delete_element_icon.png" SEARCH_ICON_PATH = "resources/search_icon_white.png" CREATE_ARCHIVE_ICON_PATH = "resources/create_archive_icon.png" UNARCHIVE_FILE_ICON_PATH = "resources/unarchive_file_icon.png" RENAME_ELEMENT_ICON_PATH = "resources/rename_icon_white.png" BACK_ICON_PATH = "resources/back_icon.png" # Elements icons FILE_ICON_PATH = "resources/file_icon.png" FOLDER_ICON_PATH = "resources/folder_icon.png" ZIP_ICON_PATH = "resources/zip_icon.png" # Tooltips COPY_TOOLTIP = "Copy files / folders" MOVE_TOOLTIP = "Move files / folders" DELETE_TOOLTIP = "Delete files / folders" ARCHIVE_TOOLTIP = "Archive files / folders" UNARCHIVE_TOOLTIP = "Unarchive files / folders" CREATE_FILE_TOOLTIP = "Create a new text file" CREATE_DIRECTORY_TOOLTIP = "Create a new folder" RENAME_TOOLTIP = "Rename a file / folder" BACK_TOOLTIP = "Move up one directory" # Buttons name COPY = "Copy" MOVE = "Move" DELETE = "Delete" ARCHIVE = "Archive" UNARCHIVE = "Unarchive" RENAME = "Rename" CREATE_FILE = "Create file" CREATE_FOLDER = "Create folder" # Labels SELECTED_ITEMS_TEXT = "Selected items:" ARCHIVE_NAME_TEXT = "Archive name:" CREATE_FILE_NAME_TEXT = "File name:" CREATE_FOLDER_NAME_TEXT = "Folder name:" RENAME_ELEMENT_TEXT = "New name:" def __init__(self, parent, model, controller): super(MainWidget, self).__init__(parent) self._model = model self._controller = controller # FILES LIST VIEW self.filesListView = FilesListView(self.FILES_LIST_VIEW_WIDTH, self.FILES_LIST_VIEW_HEIGHT, self._model, self._controller, self) self.filesListView.move(230, 120) # TREE VIEW FOR SYSTEM DIRECTORY HIERARCHY self.treeView = TreeView(self._model, self._controller, self) self.treeView.setFixedSize(200, 820) self.treeView.move(0, 60) # DISC SELECTION COMBO BOX self.discSelectionComboBox = QComboBox(self) self.discSelectionComboBox.setFixedSize(100, 30) self.discSelectionComboBox.move(230, 60) self.discSelectionComboBox.addItems(self._model.combo_box_list) # CONNECT WIDGETS TO CONTROLLER self.discSelectionComboBox.currentTextChanged.connect( self._controller.change_combo_box_selection) # LISTEN FOR MODEL EVENT SIGNALS self._model.combo_box_selection_changed.connect( self.on_combo_box_selection_changed) self.frameRightMenu = QWidget(self) self.frameRightMenu.setFixedSize(360, self.HEIGHT) self.frameRightMenu.move(1450, 15) self.frameRightMenu.setStyleSheet(self.TOOGLE_CLOSED_COLOR) # BUTTON WHICH TOOGLE ON/OFF THE TREE VIEW CONTAINING THE SELECTED ITEMS TREE VIEW self.toggleButton = QPushButton(QIcon(self.BUTTON_CLOSED_ICON_PATH), self.EMPTY_STRING, self) self.toggleButton.setFixedSize(100, 70) self.toggleButton.move(1300, 0) self.toggleButton.setStyleSheet(self.TOOGLE_BUTTON_CSS_PROPERTY) self._enable = True self.toggleButton.clicked.connect( lambda: Animations.toggleMenu(self, self._enable)) # Label that shows "Selected items:" self.selectedItemsLabel = QLabel(self.SELECTED_ITEMS_TEXT, self.frameRightMenu) self.selectedItemsLabel.move(100, 20) self.selectedItemsLabel.setStyleSheet(self.FRAME_LABEL_STYLE) # The list with selected elements from FilesListView self.selectedFilesListWidget = QListWidget(self.frameRightMenu) self.selectedFilesListWidget.setFixedSize(320, 500) self.selectedFilesListWidget.move(23, 60) self.selectedFilesListWidget.setStyleSheet(self.WHITE) # ACTIONS BUTTONS # Copy button self.copyElementButton = OperationsWidgetButton( QIcon(self.COPY_ELEMENT_ICON_PATH), self.EMPTY_STRING, self) self.copyElementButton.clicked.connect(self.doCopy) self.copyElementButton.move(230, 0) self.copyElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.copyElementButton.setToolTip(self.COPY_TOOLTIP) # Move button self.moveElementButton = OperationsWidgetButton( QIcon(self.MOVE_ELEMENT_ICON_PATH), self.EMPTY_STRING, self) self.moveElementButton.clicked.connect(self.doMove) self.moveElementButton.move(290, 0) self.moveElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.moveElementButton.setToolTip(self.MOVE_TOOLTIP) # Delete button self.deleteElementButton = OperationsWidgetButton( QIcon(self.DELETE_ELEMENT_ICON_PATH), self.EMPTY_STRING, self) self.deleteElementButton.clicked.connect(self.doDelete) self.deleteElementButton.move(350, 0) self.deleteElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.deleteElementButton.setToolTip(self.DELETE_TOOLTIP) # Archive button self.archiveElementButton = OperationsWidgetButton( QIcon(self.CREATE_ARCHIVE_ICON_PATH), self.EMPTY_STRING, self) self.archiveElementButton.clicked.connect(self.doArchive) self.archiveElementButton.move(410, 0) self.archiveElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.archiveElementButton.setToolTip(self.ARCHIVE_TOOLTIP) # Unarchive button self.unarchiveElementButton = OperationsWidgetButton( QIcon(self.UNARCHIVE_FILE_ICON_PATH), self.EMPTY_STRING, self) self.unarchiveElementButton.clicked.connect(self.doUnarchive) self.unarchiveElementButton.move(470, 0) self.unarchiveElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.unarchiveElementButton.setToolTip(self.UNARCHIVE_TOOLTIP) # Add file button self.addFileButton = OperationsWidgetButton( QIcon(self.ADD_FILE_ICON_PATH), self.EMPTY_STRING, self) self.addFileButton.clicked.connect(self.doCreateFile) self.addFileButton.move(530, 0) self.addFileButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.addFileButton.setToolTip(self.CREATE_FILE_TOOLTIP) # Add directory button self.addDirectoryButton = OperationsWidgetButton( QIcon(self.ADD_DIRECTORY_ICON_PATH), self.EMPTY_STRING, self) self.addDirectoryButton.clicked.connect(self.doCreateFolder) self.addDirectoryButton.move(590, 0) self.addDirectoryButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.addDirectoryButton.setToolTip(self.CREATE_DIRECTORY_TOOLTIP) # Move button self.renameElementButton = OperationsWidgetButton( QIcon(self.RENAME_ELEMENT_ICON_PATH), self.EMPTY_STRING, self) self.renameElementButton.clicked.connect(self.doRename) self.renameElementButton.move(650, 0) self.renameElementButton.setFixedSize(self.OPERATION_BUTTON_WIDTH, self.OPERATION_BUTTON_HEIGHT) self.renameElementButton.setToolTip(self.RENAME_TOOLTIP) # Text field needed for displaying the current path self.currentPathLineEdit = QLineEdit(self.EMPTY_STRING, self) self.currentPathLineEdit.move(350, 80) self.currentPathLineEdit.setFixedSize(400, 27) self.currentPathLineEdit.setStyleSheet( self.CURRENT_PATH_LINE_EDIT_PROPERTY) self.currentPathLineEdit.setReadOnly(True) self.currentPathLineEdit.setText(self._model.current_path) self.currentPathLineEdit.textChanged.connect( self._controller.change_current_path_text) self._model.current_path_changed.connect(self.on_current_path_changed) # Text field needed for searching file / folder by the name self.searchLineEdit = QLineEdit(self.EMPTY_STRING, self) self.searchLineEdit.move(810, 80) self.searchLineEdit.setFixedSize(200, 27) self.searchLineEdit.textChanged.connect( self._controller.change_search_text) self._model.current_search_changed.connect( self.on_current_search_changed) self.searchIconButton = OperationsWidgetButton( QIcon(self.SEARCH_ICON_PATH), self.EMPTY_STRING, self) self.searchIconButton.move(1015, 78) self.searchIconButton.setFixedSize(30, 30) self.searchIconButton.setStyleSheet(self.SEARCH_ICON_STYLE) self.searchIconButton.setEnabled(False) self.backButton = OperationsWidgetButton(QIcon(self.BACK_ICON_PATH), self.EMPTY_STRING, self) self.backButton.clicked.connect(self.doBack) self.backButton.move(765, 80) self.backButton.setFixedSize(25, 25) self.backButton.setStyleSheet(self.BACK_ICON_STYLE) self.backButton.setToolTip(self.BACK_TOOLTIP) self.backButton.setEnabled(True) # ACTIONS LABELS self.archiveLabel = QLabel(self.ARCHIVE_NAME_TEXT, self.frameRightMenu) self.createFolderLabel = QLabel(self.CREATE_FOLDER_NAME_TEXT, self.frameRightMenu) self.createFileLabel = QLabel(self.CREATE_FILE_NAME_TEXT, self.frameRightMenu) self.renameElementLabel = QLabel(self.RENAME_ELEMENT_TEXT, self.frameRightMenu) # ACTIONS LINE EDITS self.archiveNameEditLine = QLineEdit(self.EMPTY_STRING, self.frameRightMenu) self.createFileEditLine = QLineEdit(self.EMPTY_STRING, self.frameRightMenu) self.createFolderEditLine = QLineEdit(self.EMPTY_STRING, self.frameRightMenu) self.renameElementEditLine = QLineEdit(self.EMPTY_STRING, self.frameRightMenu) # ACTIONS BUTTONS self.copyButton = ToggleMenuButton(self.COPY, self.frameRightMenu) self.moveButton = ToggleMenuButton(self.MOVE, self.frameRightMenu) self.deleteButton = ToggleMenuButton(self.DELETE, self.frameRightMenu) self.archiveButton = ToggleMenuButton(self.ARCHIVE, self.frameRightMenu) self.unarchiveButton = ToggleMenuButton(self.UNARCHIVE, self.frameRightMenu) self.createFileButton = ToggleMenuButton(self.CREATE_FILE, self.frameRightMenu) self.createFolderButton = ToggleMenuButton(self.CREATE_FOLDER, self.frameRightMenu) self.renameElementButton = ToggleMenuButton(self.RENAME, self.frameRightMenu) self.__createFrameLayoutElements() @Slot(str) def on_current_path_changed(self, path): self._model.elements_list.clear() self._model.selected_items.clear() self.selectedFilesListWidget.clear() self._model.elements_list = Directory.get_all_subelements(path) self.filesListView.model().populateList() @Slot(str) def on_current_search_changed(self, name): print(name) def removeFromSelectedItems(self, item): Animations.toggleMenu(self, True) count = self.selectedFilesListWidget.count() index = 0 for i in range(count): if item.text() == self.selectedFilesListWidget.item(i).text(): index = i break self.selectedFilesListWidget.takeItem(index) def appendToSelectedItems(self, item): Animations.toggleMenu(self, True) listItem = ListWidgetItem(item) self.selectedFilesListWidget.insertItem(0, listItem) def setCurrentPath(self, path): self.currentPathLineEdit.setText(path) @Slot(str) def on_combo_box_selection_changed(self, value): index = self.discSelectionComboBox.findText(value) self.discSelectionComboBox.setCurrentIndex(index) Slot() def doBack(self): path = self.currentPathLineEdit.text() parentPath = os.path.dirname(path) self.setCurrentPath(parentPath) @Slot() def doCopy(self): self.__setCopyLayout(True) Animations.toggleMenu(self, True) @Slot() def doMove(self): self.__setMoveLayout(True) Animations.toggleMenu(self, True) @Slot() def doDelete(self): self.__setDeleteLayout(True) Animations.toggleMenu(self, True) @Slot() def doArchive(self): self.__setArchiveLayout(True) Animations.toggleMenu(self, True) @Slot() def doUnarchive(self): self.__setUnarchiveLayout(True) Animations.toggleMenu(self, True) @Slot() def doCreateFile(self): self.__setCreateFileLayout(True) Animations.toggleMenu(self, True) @Slot() def doCreateFolder(self): self.__setCreateFolderLayout(True) Animations.toggleMenu(self, True) @Slot() def doRename(self): self.__setRenameLayout(True) Animations.toggleMenu(self, True) # Method that creates all layout object from the frame layout def __createFrameLayoutElements(self): # ================= COPY ACTION ======================= # Copy button on right frame self.copyButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.copyButton.move(120, 600) self.copyButton.setFixedSize(120, 32) self.copyButton.setVisible(False) # ================= MOVE ACTION ======================= # Move button on right frame self.moveButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.moveButton.move(120, 600) self.moveButton.setFixedSize(120, 32) self.moveButton.setVisible(False) # ================= DELETE ACTION ======================= # Delete button on right frame self.deleteButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.deleteButton.move(120, 600) self.deleteButton.setFixedSize(120, 32) self.deleteButton.setVisible(False) # ================= UNARCHIVE ACTION ======================= # Unarchive button on right frame self.unarchiveButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.unarchiveButton.move(120, 600) self.unarchiveButton.setFixedSize(120, 32) self.unarchiveButton.setVisible(False) # ================= ARCHIVE ACTION ======================= self.archiveLabel.move(100, 590) self.archiveLabel.setStyleSheet(self.FRAME_LABEL_STYLE) self.archiveLabel.setVisible(False) self.archiveNameEditLine.move(55, 620) self.archiveNameEditLine.setFixedSize(250, 30) self.archiveNameEditLine.setStyleSheet(self.FRAME_LINE_EDIT_STYLE) self.archiveNameEditLine.setVisible(False) self.archiveButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.archiveButton.move(120, 700) self.archiveButton.setFixedSize(120, 32) self.archiveButton.setVisible(False) # ================= CREATE NEW FILE ACTION ======================= self.createFileLabel.move(120, 590) self.createFileLabel.setStyleSheet(self.FRAME_LABEL_STYLE) self.createFileLabel.setVisible(False) self.createFileEditLine.move(55, 620) self.createFileEditLine.setFixedSize(250, 30) self.createFileEditLine.setStyleSheet(self.FRAME_LINE_EDIT_STYLE) self.createFileEditLine.setVisible(False) self.createFileButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.createFileButton.move(120, 700) self.createFileButton.setFixedSize(120, 32) self.createFileButton.setVisible(False) # ================= CREATE NEW FOLDER ACTION ======================= self.createFolderLabel.move(120, 590) self.createFolderLabel.setStyleSheet(self.FRAME_LABEL_STYLE) self.createFolderLabel.setVisible(False) self.createFolderEditLine.move(55, 620) self.createFolderEditLine.setFixedSize(250, 30) self.createFolderEditLine.setStyleSheet(self.FRAME_LINE_EDIT_STYLE) self.createFolderEditLine.setVisible(False) self.createFolderButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.createFolderButton.move(120, 700) self.createFolderButton.setFixedSize(120, 32) self.createFolderButton.setVisible(False) # ================= RENAME ELEMENT ACTION ======================= self.renameElementLabel.move(120, 590) self.renameElementLabel.setStyleSheet(self.FRAME_LABEL_STYLE) self.renameElementLabel.setVisible(False) self.renameElementEditLine.move(55, 620) self.renameElementEditLine.setFixedSize(250, 30) self.renameElementEditLine.setStyleSheet(self.FRAME_LINE_EDIT_STYLE) self.renameElementEditLine.setVisible(False) self.renameElementButton.setStyleSheet(self.FRAME_BUTTON_STYLE) self.renameElementButton.move(120, 700) self.renameElementButton.setFixedSize(120, 32) self.renameElementButton.setVisible(False) # Method that sets the frame layout for rename operation def __setRenameLayout(self, shown): if shown == True: self.renameElementLabel.setVisible(True) self.renameElementEditLine.setVisible(True) self.renameElementButton.setVisible(True) self.__setCopyLayout(False) self.__setDeleteLayout(False) self.__setMoveLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.renameElementLabel.setVisible(False) self.renameElementEditLine.setVisible(False) self.renameElementButton.setVisible(False) # Method that sets the frame layout for archive operation def __setCreateFileLayout(self, shown): if shown == True: self.createFileLabel.setVisible(True) self.createFileEditLine.setVisible(True) self.createFileButton.setVisible(True) self.__setCopyLayout(False) self.__setDeleteLayout(False) self.__setMoveLayout(False) self.__setRenameLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.createFileLabel.setVisible(False) self.createFileEditLine.setVisible(False) self.createFileButton.setVisible(False) # Method that sets the frame layout for archive operation def __setCreateFolderLayout(self, shown): if shown == True: self.createFolderLabel.setVisible(True) self.createFolderEditLine.setVisible(True) self.createFolderButton.setVisible(True) self.__setCopyLayout(False) self.__setDeleteLayout(False) self.__setMoveLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.createFolderLabel.setVisible(False) self.createFolderEditLine.setVisible(False) self.createFolderButton.setVisible(False) # Method that sets the frame layout for archive operation def __setArchiveLayout(self, shown): if shown == True: self.archiveLabel.setVisible(True) self.archiveNameEditLine.setVisible(True) self.archiveButton.setVisible(True) self.__setCopyLayout(False) self.__setDeleteLayout(False) self.__setMoveLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setUnarchiveLayout(False) else: self.archiveLabel.setVisible(False) self.archiveNameEditLine.setVisible(False) self.archiveButton.setVisible(False) # Method that sets the frame layout for copy operation def __setCopyLayout(self, shown): if shown == True: self.copyButton.setVisible(True) self.__setMoveLayout(False) self.__setDeleteLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.copyButton.setVisible(False) # Method that sets the frame layout for move operation def __setMoveLayout(self, shown): if shown == True: self.moveButton.setVisible(True) self.__setDeleteLayout(False) self.__setCopyLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.moveButton.setVisible(False) # Method that sets the frame layout for delete operation def __setDeleteLayout(self, shown): if shown == True: self.deleteButton.setVisible(True) self.__setCopyLayout(False) self.__setMoveLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setUnarchiveLayout(False) else: self.deleteButton.setVisible(False) # Method that sets the frame layout for unarchive operation def __setUnarchiveLayout(self, shown): if shown == True: self.unarchiveButton.setVisible(True) self.__setCopyLayout(False) self.__setMoveLayout(False) self.__setRenameLayout(False) self.__setCreateFileLayout(False) self.__setCreateFolderLayout(False) self.__setArchiveLayout(False) self.__setDeleteLayout(False) else: self.unarchiveButton.setVisible(False)