示例#1
0
    def demoWidget(self):
        cb = QCheckBox("MyCheckBox", self)
        cb.move(0, 0)
        cb.resize(cb.sizeHint()) #가장 최적의 사이즈를 찾아줌
        cb.stateChanged.connect(self.changed)
        #stateChanged는 시그널임. self.changed

        s = QSlider(QtCore.Qt.Horizontal , self)
        s.move(30,30)
        s.setRange(0,100) #범위 지정
        s.resize(300,10)
        s.setSingleStep(2) #최소 단위 설정
        s.valueChanged.connect(self.slider)

        self.label = QLabel(self)
        self.label.move(0, 100)
        self.label.setText("Hello <b style='color: red'>QLabel</b>")

        self.qle1 = QLineEdit(self)
        self.qle2 = QLineEdit(self)
        label2 = QLabel(self)

        self.qle1.move(0,150)
        label2.move(110,150)
        label2.setText("+")
        label2.resize(20,30)
        self.qle2.move(130,150)

        self.button = QPushButton("result", self)
        self.button.move(0,200)
        self.button.clicked.connect(self.calculation_add)

        self.result = QLabel(self)
        self.result.move(0,250)
        self.result.setFont(QtGui.QFont('SansSerif', 20))
    def initUI(self):
        cb=QCheckBox('请选择我',self)
        cb.move(50,50)

        cb.stateChanged.connect(self.changeTitle)
        self.setGeometry(300,300,250,150)
        self.setWindowTitle('还没有选择我')
        self.show()
    def initUI(self):
        checkbox = QCheckBox("Show Title", self)
        checkbox.move(20, 20)
        checkbox.toggle()
        checkbox.stateChanged.connect(self.changeTitle)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle("QCheckBox")
        self.show()
示例#4
0
    def initUI(self):

        cb = QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()     # 选中checkBox
        cb.stateChanged.connect(self.changeTitle)
        # checkBox, 带参数信号

        self.setGeometry(300, 300, 600, 400)
        self.setWindowTitle('QCheckBox')
        self.show()
    def displayWidgets(self):
        """
        Configura os widgets da app
        """
        
        login_lbl = QLabel(self)
        login_lbl.setText("login")
        login_lbl.move(180, 10) # localiza o label na tela
        login_lbl.setFont(QFont('Arial', 20))

        nome_lbl = QLabel("usuário:", self)
        nome_lbl.move(30, 60) # localiza o label na tela

        self.nome_edit = QLineEdit(self)
        self.nome_edit.setAlignment(Qt.AlignLeft) # Este é o padrão
        self.nome_edit.move(110, 60)
        self.nome_edit.resize(220, 20) # mudando o tamanho da caixa de texto
        
        pwd_lbl = QLabel("senha:", self)
        pwd_lbl.move(30, 90) # localiza o label na tela

        self.pwd_edit = QLineEdit(self)
        self.pwd_edit.setEchoMode(QLineEdit.Password)
        self.pwd_edit.setAlignment(Qt.AlignLeft) # Este é o padrão
        self.pwd_edit.move(110, 90)
        self.pwd_edit.resize(220, 20) # mudando o tamanho da caixa de texto

        sigin_btn = QPushButton('login', self)
        sigin_btn.clicked.connect(self.clickLogin)
        sigin_btn.move(100, 140) # localizando o botão na tela
        sigin_btn.resize(200, 40)

        show_pwd_cbx = QCheckBox("Mostrar a senha", self)
        show_pwd_cbx.move(110, 115)
        show_pwd_cbx.toggle()
        show_pwd_cbx.setChecked(False)
        show_pwd_cbx.stateChanged.connect(self.showPassword)

        out_lbl = QLabel("não é usuário?", self)
        out_lbl.move(50, 200) # localiza o label na tela

        sigup_btn = QPushButton('registrar', self)
        sigup_btn.clicked.connect(self.criarNovo)
        sigup_btn.move(160, 190) # localizando o botão na tela
示例#6
0
    def displayWidgets(self):
        """
        Configura os widgets da app
        """
        # Criando um label e um edit para o nome
        quest_lbl = QLabel(self)
        quest_lbl.setText(
            "Em quais turnos você pode trabalhar? (Verifque antes de confirmar)"
        )
        quest_lbl.setWordWrap(True)
        quest_lbl.move(10, 10)  # localiza o label na tela
        quest_lbl.resize(230, 60)

        # definindo os checkboxes
        manha_cbx = QCheckBox("Matutino [8:00 - 14:00]", self)
        manha_cbx.move(20, 80)
        manha_cbx.toggle()
        manha_cbx.stateChanged.connect(self.printToTerminal)

        tarde_cbx = QCheckBox("Vespertino [14:00 - 20:00]", self)
        tarde_cbx.move(20, 100)
        #tarde_cbx.toggle()
        tarde_cbx.stateChanged.connect(self.printToTerminal)

        noite_cbx = QCheckBox("Noturno [20:00 - 2:00]", self)
        noite_cbx.move(20, 120)
        #noite_cbx.toggle()
        noite_cbx.stateChanged.connect(self.printToTerminal)
示例#7
0
 def initializeUI(self):
     self.setGeometry(100, 100, 250, 250)
     self.setWindowTitle('QCheckBox Test')
     self.label.move(30, 200)
     header_label = QLabel(self)
     header_label.setText("Во сколько вы просыпаетесь?")
     header_label.setWordWrap(True)
     header_label.move(10, 10)
     header_label.resize(230, 60)
     morning6 = QCheckBox("6 утра", self)  # text, parent
     morning6.move(20, 80)
     morning6.stateChanged.connect(self.printChoose)
     morning7 = QCheckBox("7 утра", self)  # text, parent
     morning7.move(20, 100)
     morning7.stateChanged.connect(self.printChoose)
     never_sleep = QCheckBox("Я вообще не сплю", self)  # text, parent
     never_sleep.move(20, 120)
     never_sleep.stateChanged.connect(self.printChoose)
     self.show()
示例#8
0
import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QLabel, QCheckBox, QPushButton, QLabel

aplicacao = QApplication(sys.argv)

janela = QMainWindow()
janela.setGeometry(100, 50, 300, 300)
janela.setWindowTitle("Primeira Janela")
label = QLabel("Selecione uma ou mais opções", janela)
label.move(50, 20)
label.resize(200, 20)
checkbox_1 = QCheckBox("Opção 1", janela)
checkbox_1.move(50, 40)
checkbox_2 = QCheckBox("Opção 2", janela)
checkbox_2.move(50, 60)
checkbox_3 = QCheckBox("Opção 3", janela)
checkbox_3.move(50, 80)
checkbox_3.setChecked(True)

label_resultado = QLabel("Opções selecionadas: ", janela)
label_resultado.move(50, 190)
label_resultado.resize(200, 30)

resultado = QLabel("", janela)
resultado.move(50, 210)
resultado.resize(200, 60)


def onButtonClicked():
    checked = ""
    # verifica quais checkboxes estão selecionados e
示例#9
0
janela.setWindowTitle("Primeira Janela")

label = QLabel("Checkboxes selecionados", janela)
label.move(50, 120)
label.resize(130, 30)

result = QLabel("", janela)
result.move(50, 140)
result.resize(100, 60)

group_box = QGroupBox("Selecione uma ou mais opções", janela)
group_box.move(50, 20)
group_box.resize(200, 100)

checkbox_1 = QCheckBox("Opção 1", group_box)
checkbox_1.move(10, 20)
checkbox_2 = QCheckBox("Opção 2", group_box)
checkbox_2.move(10, 40)
checkbox_3 = QCheckBox("Opção 3", group_box)
checkbox_3.move(10, 60)


def onClickCheckBox():
    text = ""
    text += "checkbox 1: " + str(checkbox_1.isChecked())
    text += "\ncheckbox 2: " + str(checkbox_2.isChecked())
    text += "\ncheckbox 3: " + str(checkbox_3.isChecked())
    result.setText(text)


checkbox_1.clicked.connect(onClickCheckBox)
示例#10
0
import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QLabel, QCheckBox

aplicacao = QApplication(sys.argv)

janela = QMainWindow()
# setGeometry(esquerda, topo, largura, altura)
janela.setGeometry(100, 50, 300, 200)
janela.setWindowTitle("Primeira Janela")
# cria uma instancia de um grupo de seleção dentro da janela
label = QLabel("Selecione uma ou mais opções", janela)
label.move(30, 30)
label.resize(200, 20)
# cria os checkbox dentro do grupo de seleção
checkbox_1 = QCheckBox("Opção 1", janela)
checkbox_1.move(30, 60)
checkbox_2 = QCheckBox("Opção 2", janela)
checkbox_2.move(30, 80)
checkbox_3 = QCheckBox("Opção 3", janela)
checkbox_3.move(30, 100)
janela.show()

aplicacao.exec_()
sys.exit()
示例#11
0
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
示例#12
0
文件: color.py 项目: Yobmod/dmltests
class Window(QMainWindow):
    def __init__(self) -> None:
        super(Window, self).__init__()
        self.setGeometry(50, 50, 500, 300)
        self.setWindowTitle("PyQT tuts!")
        self.setWindowIcon(QIcon('pythonlogo.png'))

        extractAction = QAction("&GET TO THE CHOPPAH!!!", self)
        extractAction.setShortcut("Ctrl+Q")
        extractAction.setStatusTip('Leave The App')
        extractAction.triggered.connect(self.close_application)

        self.statusBar()

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(extractAction)

        self._setup()

    def _setup(self) -> None:

        # Set the central widget
        self._centralWidget = QWidget()
        self.setCentralWidget(self._centralWidget)
        self.generalLayoutMaster = QVBoxLayout()
        self._centralWidget.setLayout(self.generalLayoutMaster)

        extractAction = QAction(QIcon('coffeebean.ico'), 'Flee the Scene',
                                self)
        extractAction.triggered.connect(self.close_application)
        self.toolBar = self.addToolBar("Extraction")
        self.toolBar.addAction(extractAction)

        self._font_choice()
        self._font_color()
        self._quit_button()
        self._calender()
        self._calculator()
        self._style_selector()
        self._progressbar_button()
        self._resize_checkbox()

    def _resize_checkbox(self) -> None:
        self.checkBox = QCheckBox('Enlarge Window', self)
        self.checkBox.move(300, 25)
        self.checkBox.stateChanged.connect(self.enlarge_window_with_check)
        # self.checkBox.stateChanged.connect(self.enlarge_window_from_state)  ## useable with multple widgets

    def _progressbar_button(self) -> None:
        self.progress = QProgressBar(self)
        self.progress.setGeometry(200, 80, 250, 20)
        self.generalLayoutMaster.addWidget(self.progress)

        self.btn = QPushButton("Download", self)
        self.btn.move(200, 120)
        self.btn.clicked.connect(self.download)
        self.generalLayoutMaster.addWidget(self.btn)

    def _style_selector(self) -> None:
        # print(self.style().objectName())
        self.styleChoice = QLabel("Windows Vista", self)
        # self.styleChoice.move(50, 150)
        self.generalLayoutMaster.addWidget(self.styleChoice)

        comboBox = QComboBox(self)
        comboBox.addItem("motif")
        comboBox.addItem("Windows")
        comboBox.addItem("cde")
        comboBox.addItem("Plastique")
        comboBox.addItem("Cleanlooks")
        comboBox.addItem("windowsvista")
        # comboBox.move(50, 250)
        comboBox.activated[str].connect(self.style_choice)
        self.generalLayoutMaster.addWidget(comboBox)

    def _calender(self) -> None:
        cal = QCalendarWidget(self)
        #cal.move(500, 200)
        #cal.resize(200, 200)
        cal.setFixedSize(235, 235)
        self.generalLayoutMaster.addWidget(cal)

    def _quit_button(self) -> None:
        btn = QPushButton("Quit", self)
        btn.clicked.connect(self.close_application)
        btn.resize(btn.minimumSizeHint())
        # btn.move(0, 100)
        self.generalLayoutMaster.addWidget(btn)

    def _font_choice(self) -> None:
        fontChoice = QAction('Font', self)
        fontChoice.triggered.connect(self.font_choice)
        #self.toolBar = self.addToolBar("Font")
        self.toolBar.addAction(fontChoice)

    def _font_color(self) -> None:
        fontColor = QAction('Font bg Color', self)
        fontColor.triggered.connect(self.color_picker)

        self.toolBar.addAction(fontColor)

    def _calculator(self) -> None:
        calculator = PyCalcUi(self)
        self.generalLayoutMaster.addWidget(calculator)

    def color_picker(self) -> None:
        color = QColorDialog.getColor()
        self.styleChoice.setStyleSheet("QWidget { background-color: %s}" %
                                       color.name())

    def font_choice(self) -> None:
        valid, font = QFontDialog.getFont()
        if valid is True:
            self.styleChoice.setFont(font)

    def style_choice(self, text: str) -> None:
        self.styleChoice.setText(text)
        QApplication.setStyle(QStyleFactory.create(text))

    def download(self) -> None:
        self.completed: float = 0.0

        while self.completed < 100:
            self.completed += 0.0001
            self.progress.setValue(self.completed)

    def enlarge_window_with_check(self) -> None:
        if self.checkBox.isChecked() is True:
            self.setGeometry(50, 50, 1000, 600)
        else:
            self.setGeometry(50, 50, 500, 300)

    def enlarge_window_from_state(self, state: Literal[0, 2]) -> None:
        """gets state from the signal, then can use function with multiple widgets"""
        if state == Qt.Checked:  # == 2
            self.setGeometry(50, 50, 1000, 600)
        else:  # state = 0
            self.setGeometry(50, 50, 500, 300)

    def close_application(self) -> None:
        choice = QMessageBox.question(self, 'Extract!',
                                      "Get into the chopper?",
                                      QMessageBox.Yes | QMessageBox.No)
        if choice == QMessageBox.Yes:
            print("Extracting Naaaaaaoooww!!!!")
            sys.exit()
        else:
            pass
示例#13
0
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)
示例#14
0
 def initUI(self):
     cbox = QCheckBox('チェックボックス', self)
     cbox.move(20, 20)
     cbox.toggle()
     cbox.stateChanged.connect(self.checkboxChanged)