class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("BMI Rechner") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.bmi_value.hide() self.ui.warning.hide() self.ui.button.clicked.connect(self.bmi_button_calculate) def bmi_button_calculate(self): self.ui.warning.hide() height = float(self.ui.height.value()) weight = int(self.ui.weight.value()) if height != 0 or weight != 0: bmi_calc = round(weight / (height**2), 2) self.ui.bmi_value.show() self.ui.bmi_value.setText(str(bmi_calc)) return else: self.ui.warning.setText( "Deine Größe oder dein Gewicht dürfen nicht 0 sein!") self.ui.warning.show() return
def __init__(self, parent=None): """Initializes""" QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.display1 = None self.display2 = None self.no_of_connected_dev = 0 self.__assign_displays() self.generate_dynamic_items() self.values = [] self.array_value = 0.01 for i in xrange(0, 100): self.values.append(self.array_value) self.array_value += 0.01 self.connect_handlers() self.setup_widgets() # assign hotkeys shortcuts self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Period), self), QtCore.SIGNAL('activated()'), self.increase_value_pbr) self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_Comma), self), QtCore.SIGNAL('activated()'), self.decrease_value_pbr)
def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) # init jupyter kernel self.init_jupyter_kernel(self.ui.jupyterConsole) app = QApplication.instance() app.aboutToQuit.connect(self.shutdown_jupyter_kernel) self.ui.jupyterConsole.kernel_manager.kernel.shell.push({ "mainwindow": self, }) # graphics view self.sceneOrigin = ArrayImage(self.ui.graphicsViewOrigin) self.scene = ArrayImage(self.ui.graphicsView) self.ui.graphicsViewOrigin.setScene(self.sceneOrigin) self.ui.graphicsView.setScene(self.scene) self.wheelBind = BindWheelEvent( self.ui.graphicsViewOrigin, self.ui.graphicsView, ) self.wheelBind.bind() self.slider = SliderDialog(self) self.slider.valueChanged.connect(self.slider_valueChanged)
class XonStatForm(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.keypath = os.path.expanduser('~/.xonotic/key_0.d0si') # Signals self.ui.btnImport.clicked.connect(self.file_import) self.ui.btnExport.clicked.connect(self.file_export) # Old style signals # QtCore.QObject.connect(self.ui.btnImport, QtCore.SIGNAL("clicked()"), self.file_import) # QtCore.QObject.connect(self.ui.btnExport, QtCore.SIGNAL("clicked()"), self.file_export) def file_import(self): sourcepath = self.ui.lineImport.text() with open(sourcepath, 'rb') as sourcefile: cache = sourcefile.read() with open(self.keypath, 'wb') as keyfile: keyfile.write(cache) def file_export(self): descpath = self.ui.lineExport.text() with open(self.keypath, 'rb') as keyfile: cache = keyfile.read() with open(descpath, 'wb') as descfile: descfile.write(cache)
class MainWindow(QMainWindow): def __init__(self): # Load window super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.load_tab(0) # TabView slot self.ui.tabWidget.currentChanged.connect(self.load_tab) # Menu slots self.ui.actionExit.triggered.connect(sys.exit) self.ui.actionOptions.triggered.connect(self.optionsTriggered) def load_tab(self, index): module_name = self.ui.tabWidget.tabText(index) if module_name == 'Themes': if not hasattr(self, 'themesTab'): self.themesTab = themes.ThemesWindow(self.ui) self.themesTab.load_window() elif module_name == 'Presets': if not hasattr(self, 'presetsTab'): self.presetsTab = presets.PresetsWindow(self.ui) self.presetsTab.load_window() def optionsTriggered(self): from configuration import ConfigurationWindow self.configWindow = ConfigurationWindow() self.configWindow.show()
class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Studierendenverwaltung") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.result.hide() self.ui.result_label.hide() # bmi = [Körpergewicht in kg] / [Körpergröße in m] ^ 2 self.ui.calculate.clicked.connect(self.calculate_bmi) def calculate_bmi(self): height = self.ui.height.value() weight = self.ui.weigth.value() if height != 0: self.ui.result.show() self.ui.result_label.show() bmi = round(weight / (height**2), 2) self.ui.result.setText(str(bmi)) else: self.ui.result.setText("")
def __init__(self, parent=None): """Initializes""" QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.display1 = None self.display2 = None self.temperature = 'Default' self.no_of_connected_dev = 0 self.__assign_displays() self.setup_default_directory() self.generate_dynamic_items() self.default_config = '/home/{}/.config/' \ 'brightness_controller/settings' \ .format(getpass.getuser()) self.values = [] self.array_value = 0.01 for i in xrange(0, 100): self.values.append(self.array_value) self.array_value += 0.01 self.connect_handlers() self.setup_widgets() if path.exists(self.default_config): self.load_settings(self.default_config) self.setup_tray(parent)
class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Studierendenverwaltung") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.pushButton.clicked.connect(self.search) def search(self): r = sr.Recognizer() with sr.Microphone() as source: #text = "what you want to search?" #var = gTTS(text=text, lang="en-AU", slow=False) #var.save("search.mp3") #playsound(".\s.wav") audio = r.listen(source) play = r.recognize_google(audio, language='ar') pywhatkit.playonyt(play) text = "completed" var = gTTS(text=text, lang="en") var.save("search1.mp3") playsound(".\search1.mp3") #os.remove("search.mp3") os.remove("search1.mp3")
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mainwindow = Ui_MainWindow() self.mainwindow.setupUi(self) it1 = Category(title='it1') it2 = Page('it2', 'This is it2\'s content') it3 = Page('it3', 'This is it3\'s content') it1.setChild(it1.rowCount(), it2) it1.setChild(it1.rowCount(), it3) model = QStandardItemModel() model.appendRow(it1) tv = self.mainwindow.treeView tv.setModel(model) tv.setRootIsDecorated(True) tv.setSelectionMode(QAbstractItemView.SingleSelection) tv.setSelectionBehavior(QAbstractItemView.SelectItems) tv.clicked.connect(self.printData) def printData(self): it = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex()) print('Item: {0}'.format(type(it))) self.mainwindow.textEdit.setText(it.content)
class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("My window name") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.read.clicked.connect(self.onButtonClick) def onButtonClick(self): database = DatabaseConnector( ) # sqlite3.connect('E:\\Programming\\betaDB.db') database.getNewValues() temperature = round(database.latestTemperature, 1) temperature = str(temperature) + "°C" pressure = round(database.latestPressure, 0) pressure = str(pressure) + "hPa" humidity = round(database.latestHumidity, 1) humidity = str(humidity) + "%" self.ui.temperature_text.setText(temperature) self.ui.humidity_text.setText(humidity) self.ui.pressure_text.setText(pressure)
def __init__(self): QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.setupUi(self) self.init_login_win() # self.init_order_dialog() self.init_info()
def __init__(self, parent = None): super().__init__(parent) self.setWindowTitle("GUI-Base") self.ui = Ui_MainWindow() self.ui.setupUi(self)
def initUI(self): """Create the window and connect the Qt signals to slots""" self.ui = Ui_MainWindow() self.ui.setupUi(self) # Connect signals to slots. self.ui.searchfield.textChanged.connect(self.searchlist) self.ui.memberlistwidget.currentRowChanged.connect( lambda: self.showMemberInfo()) self.ui.memberlistwidget.itemActivated.connect(self.editMember) self.ui.searchfield.returnPressed.connect( self.ui.memberlistwidget.setFocus) self.ui.actionNewMember.triggered.connect(self.createMember) self.ui.actionRemoveMember.triggered.connect(self.removeMember) self.ui.actionEditMember.triggered.connect(self.editMember) self.ui.actionMakeBackup.triggered.connect(self.makeBackup) self.ui.actionRestoreFromBackup.triggered.connect( self.restoreFromBackup) self.ui.memberlistwidget.addAction(self.ui.actionEditMember) self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember) self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu) self.populateMemberList() self.setWindowTitle('SvakSvat')
class Control(QtWidgets.QMainWindow): """Create the UI, based on PyQt5. The UI elements are defined in "mainwindow.py" and resource file "resources_rc.py", created in QT Designer. To update "mainwindow.py": Run "pyuic5.exe --from-imports mainwindow.ui -o mainwindow.py" To update "resources_rc.py": Run "pyrcc5.exe resources.qrc -o resource_rc.py" Note: Never modify "mainwindow.py" or "resource_rc.py" manually. """ def __init__(self): super().__init__() # Create the main window self.ui = Ui_MainWindow() # Set upp the UI self.ui.setupUi(self) # self.show() # Get a list of available serial ports (e.g. "COM1" in Windows) self.serial_ports = connection.get_serial_ports() self.ui.comboBox.addItems(self.serial_ports) self.setup_ui_logic() # Populate the "COM port" combo box with available serial ports #self.ui.comboBoxComPorts.addItems(self.serial_ports) def setup_ui_logic(self): """Define QT signal and slot connections and initializes UI values.""" # Connect "Restart Communication" button self.ui.quitbutton.clicked.connect(QApplication.instance().quit)
class MainWindow(QMainWindow): def __init__(self): # Load window super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.load_tab(0) # TabView slot self.ui.tabWidget.currentChanged.connect(self.load_tab) # Menu slots self.ui.actionExit.triggered.connect(sys.exit) self.ui.actionOptions.triggered.connect(self.optionsTriggered) def load_tab(self, index): module_name = self.ui.tabWidget.tabText(index) if module_name == "Themes": if not hasattr(self, "themesTab"): self.themesTab = themes.ThemesWindow(self.ui) self.themesTab.load_window() elif module_name == "Presets": if not hasattr(self, "presetsTab"): self.presetsTab = presets.PresetsWindow(self.ui) self.presetsTab.load_window() def optionsTriggered(self): from configuration import ConfigurationWindow self.configWindow = ConfigurationWindow() self.configWindow.show()
def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.status.text() self.setWindowTitle("TEZOS password finder") self.ui.StartButton.clicked.connect(self.start_Button_click)
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.treeModel = ASTTreeModel(self) self.ui.treeView.setModel(self.treeModel)
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("My window name") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.read.clicked.connect(self.onButtonClick)
def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) # self.setWindowState(Qt.WindowMaximized) self.init_events() self.hub = DeviceHub() self.hub.seeked.connect(self.on_hub_seek)
def __init__(self): super(PySub, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.address = IPAddress() self.run()
def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ctx = gpgme.Context() self.keylistModel = GPGKeyListModel(self.ctx, self.ui.treeViewKeyList) self.ui.treeViewKeyList.setModel(self.keylistModel)
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Studierendenverwaltung") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.pushButton.clicked.connect(self.search)
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.keypath = os.path.expanduser('~/.xonotic/key_0.d0si') # Signals self.ui.btnImport.clicked.connect(self.file_import) self.ui.btnExport.clicked.connect(self.file_export)
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("BMI Rechner") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.bmi_value.hide() self.ui.warning.hide() self.ui.button.clicked.connect(self.bmi_button_calculate)
def __init__(self, parent=None): super().__init__(parent=parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.sale_Btn.clicked.connect(self.on_sale_btn_clicked) self.ui.show_stock_Btn.clicked.connect(self.show_stock_btn_clicked) self.ui.purchase_Btn.clicked.connect(self.on_purchase_btn_clicked) self.ui.return_Btn.clicked.connect(self.on_return_btn_clicked) self.ui.statistics_Btn.clicked.connect(self.on_statistics_btn_clicked)
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.debs = {} self.parse_packages() self.list_components() self.list_installed_components() self.update_table()
def __init__(self): super().__init__() # Set up the user interface from Designer self.ui = Ui_MainWindow() self.ui.setupUi(self) # Connect up the buttons self.ui.btn_open.clicked.connect(self.status_msg) self.ui.btn_calc.clicked.connect(self.status_msg)
def __init__(self): super(Window, self).__init__() self.ui = Ui_MainWindow() self.aboutui = AboutWindow() self.ui.setupUi(self) self.initUI() self.ui.scene = GraphicsScene() self.ui.graphicsView.setScene(self.ui.scene) print(dir(self.ui.scene))
class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Studierendenverwaltung") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.readCsvFile("./Python/Python Bootcamp/QT/CSV_Import/students.csv") self.ui.newEntryButton.clicked.connect(self.onNewEntry) self.ui.saveButton.clicked.connect(self.onSave) self.ui.actionSave.triggered.connect(self.onSave) def onSave(self): with open('./Python/Python Bootcamp/QT/CSV_Import/students.csv', 'w', newline='', encoding="utf-8") as file: writer = csv.writer(file, delimiter=",", quotechar='"') rows = self.ui.studentsTable.rowCount() for i in range(0, rows): rowContent = [ self.ui.studentsTable.item(i, 0).text(), self.ui.studentsTable.item(i, 1).text(), self.ui.studentsTable.item(i, 2).text() ] writer.writerow(rowContent) def onNewEntry(self): row = self.ui.studentsTable.rowCount() self.ui.studentsTable.insertRow(row) self.ui.studentsTable.setItem(row, 0, QtWidgets.QTableWidgetItem("")) self.ui.studentsTable.setItem(row, 1, QtWidgets.QTableWidgetItem("")) self.ui.studentsTable.setItem(row, 2, QtWidgets.QTableWidgetItem("")) cell = self.ui.studentsTable.item(row, 0) self.ui.studentsTable.editItem(cell) def readCsvFile(self, filename): self.ui.studentsTable.setRowCount(0) with open(filename, "r", newline='', encoding="utf-8") as file: reader = csv.reader(file, delimiter=',', quotechar='"') for line in reader: row = self.ui.studentsTable.rowCount() self.ui.studentsTable.insertRow(row) self.ui.studentsTable.setItem( row, 0, QtWidgets.QTableWidgetItem(line[0])) self.ui.studentsTable.setItem( row, 1, QtWidgets.QTableWidgetItem(line[1])) self.ui.studentsTable.setItem( row, 2, QtWidgets.QTableWidgetItem(line[2]))
def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Rezepte") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.readCsvFile("rezepte.csv") self.ui.newEntryButton.clicked.connect(self.onNewEntry) self.ui.saveButton.clicked.connect(self.onSave)
def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) # Sets the system date as the reference and request date value. self.ui.dateEdit_startDate.setDate(QtCore.QDate.currentDate()) self.ui.dateEdit_mesDate.setDate((QtCore.QDate.currentDate())) # Button activate self.ui.button_calculate.clicked.connect(self.on_button_click)
def __init__(self,parent = None): super().__init__(parent) self.setWindowTitle("Studentenverwaltung") self.ui = Ui_MainWindow() self.ui.setupUi(self) self.readCsvFile("students.csv") self.ui.newEntryButton.clicked.connect(self.onNewEntry) self.ui.saveButton.clicked.connect(self.onSave) self.ui.actionSpeichern.triggered.connect(self.onSave)
def __init__(self, data, classifier, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.set_data(data) self.classifier = classifier self.ui.cacl_button.clicked.connect(self.do_calc)
def setupUi(self, window): Ui_MainWindow.setupUi(self, window) header = QtGui.QHeaderView(QtCore.Qt.Horizontal) header.setResizeMode(QtGui.QHeaderView.Stretch) self.episodeTable.setHorizontalHeader(header) self.fetchFeedButton.clicked.connect(self._load_feed) self.downloadButton.clicked.connect(self._download) self.deleteButton.clicked.connect(self._delete_row) self.saveQueueButton.clicked.connect(self._save_queue) self.settings = SettingsDialog() self.settingsButton.clicked.connect(self.settings.show) QtGui.qApp.queuehandler.finishedLoading.connect(self._set_model) QtGui.qApp.queuehandler.load() QtGui.qApp.downloader.fileDownloaded.connect(self._downloaded) QtGui.qApp.downloader.notFound.connect(self._notfound)
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mainwindow = Ui_MainWindow() self.mainwindow.setupUi(self) self.current_list = session.query(List).filter_by(name=u'Default').one() self.load_data() self.editor = Editor(self) self.editor.hide() logging.basicConfig(level=logging.DEBUG)
def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.createObjects() self.setup() self.world.add_polygn('Teste', [(30,30), (50,30), (50,50), (30,50)]) self.ui.edWindowFactor.setText('5')
def __init__(self): # Load window super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.load_tab(0) # TabView slot self.ui.tabWidget.currentChanged.connect(self.load_tab) # Menu slots self.ui.actionExit.triggered.connect(sys.exit) self.ui.actionOptions.triggered.connect(self.optionsTriggered)
def __init__(self): QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowIcon(QIcon('icon.png')) self.ui.actionLoad_Lyrics.triggered.connect(self._load_lyrics_thread) self.cb_backends() # about widget self.aboutUi = About() self.ui.actionAbout.triggered.connect(self._about) self.aboutUi.setWindowModality(Qt.WindowModal) self._load_lyrics_thread()
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mainwindow = Ui_MainWindow() self.mainwindow.setupUi(self) it1 = Category(title='it1') it2 = Page('it2', 'This is it2\'s content') it3 = Page('it3', 'This is it3\'s content') it1.setChild(it1.rowCount(), it2) it1.setChild(it1.rowCount(), it3) model = QStandardItemModel() model.appendRow(it1) tv = self.mainwindow.treeView tv.setModel(model) tv.setRootIsDecorated(True) tv.setSelectionMode(QAbstractItemView.SingleSelection) tv.setSelectionBehavior(QAbstractItemView.SelectItems) tv.clicked.connect(self.printData)
def __init__(self, parent=None): """Initializes""" QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.display1 = None self.display2 = None self.no_of_connected_dev = 0 self.__assign_displays() self.values = [] self.array_value = 0.01 for i in xrange(0, 100): self.values.append(self.array_value) self.array_value += 0.01 self.connect_handlers() self.setup_widgets()
def __init__(self, parent=None): super(Main, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setFixedSize(648, 635) self.setWindowTitle("ChessQt") self.style = ["background: #333", "background: #fff"] self.ui.actionNowa_gra.triggered.connect(self.newGame) self.next_move = False for i in xrange(8): for j in xrange(8): m_label = MyLabel(i, j, self.style[(i + j) % 2]) labels[(i, j)] = m_label self.ui.gridLayout_2.addWidget(m_label, i, j) m_label.clicked.connect(self.slotClicked) self.newGame()
def __init__(self, app): QMainWindow.__init__(self) self.app = app self.ui = Ui_MainWindow() self.ui.setupUi(self) self._exit = False self.ui.action_Exit.triggered.connect(self.exit) self.ui.actionAbout_Qt.triggered.connect(app.aboutQt) self.setWindowIcon(QIcon(':/icons/logo32')) self.listener = None self.tray = None self.pusher = None self._connected = False self.settings_dlg = SettingsDlg(self) self.settings_dlg.saved.connect(self.reconnect) self.tray = PushbulletTray(self) self.connect_actions() self.connect_pushbullet() self.tray.show()
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.targetActions = [ self.ui.actionMarkdown, self.ui.actionKAG3, self.ui.actionNScripter, ] # constants self.HESTIA_ARCHIVE_FILTER = self.tr("Hestia Archive(*.hax)") width = self.ui.splitterScenario.width() w = width // 3 m = width % 3 self.ui.splitterScenario.setSizes([w, w*2+m]) self.ui.splitterScript.setSizes([w, w*2+m]) self.highlighter = ScenarioHighlighter(self.ui.textEditScenario.document()) self.scenarioRestore.connect(self.scenarioRestored) self.errorMessageDialog = ErrorMessageDialog(self) self.previewHasReady = False self.glWindow = GLWindow(self) self.glWindow.setViewSize(1280, 720) self.glWindow.ready.connect(self.previewWindow_ready) self.glWindow.next.connect(self.previewWindow_toNext) self.glWindow.prev.connect(self.previewWindow_toPrev) self.doubleBufferObject = None self.initialize() QMetaObject.invokeMethod(self.glWindow, "show")
def initUI(self): """Create the window and connect the Qt signals to slots""" self.ui = Ui_MainWindow() self.ui.setupUi(self) # Connect signals to slots. self.ui.searchfield.textChanged.connect(self.searchlist) self.ui.memberlistwidget.currentRowChanged.connect(lambda: self.showMemberInfo()) self.ui.memberlistwidget.itemActivated.connect(self.editMember) self.ui.searchfield.returnPressed.connect(self.ui.memberlistwidget.setFocus) self.ui.actionNewMember.triggered.connect(self.createMember) self.ui.actionRemoveMember.triggered.connect(self.removeMember) self.ui.actionEditMember.triggered.connect(self.editMember) self.ui.actionMakeBackup.triggered.connect(self.makeBackup) self.ui.actionRestoreFromBackup.triggered.connect(self.restoreFromBackup) self.ui.memberlistwidget.addAction(self.ui.actionEditMember) self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember) self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu) self.populateMemberList() self.setWindowTitle('SvakSvat')
class SvakSvat(QMainWindow): """Member Registry Application.""" def __init__(self, session): """Create the window. session -- Sqlalchemy scoped_session. """ super().__init__() self.session = session # Assuming scoped_session self.initUI() try: self.ldapmanager = useraccounts.LDAPAccountManager() except Exception as e: print(e) print("Deaktiverar LDAP-integration.") self.ldapmanager = None self.setStatusMessage("Redo!", 3000) def initUI(self): """Create the window and connect the Qt signals to slots""" self.ui = Ui_MainWindow() self.ui.setupUi(self) # Connect signals to slots. self.ui.searchfield.textChanged.connect(self.searchlist) self.ui.memberlistwidget.currentRowChanged.connect(lambda: self.showMemberInfo()) self.ui.memberlistwidget.itemActivated.connect(self.editMember) self.ui.searchfield.returnPressed.connect(self.ui.memberlistwidget.setFocus) self.ui.actionNewMember.triggered.connect(self.createMember) self.ui.actionRemoveMember.triggered.connect(self.removeMember) self.ui.actionEditMember.triggered.connect(self.editMember) self.ui.actionMakeBackup.triggered.connect(self.makeBackup) self.ui.actionRestoreFromBackup.triggered.connect(self.restoreFromBackup) self.ui.memberlistwidget.addAction(self.ui.actionEditMember) self.ui.memberlistwidget.addAction(self.ui.actionRemoveMember) self.ui.memberlistwidget.setContextMenuPolicy(Qt.ActionsContextMenu) self.populateMemberList() self.setWindowTitle('SvakSvat') def makeBackup(self): filename = QFileDialog.getSaveFileName(self, 'Välj namn för säkerhetskopia', '.')[0] with open(filename, 'wb') as f: pickler = pickle.Pickler(f) pickler.dump(backup_everything(self.session)) def restoreFromBackup(self): filename = QFileDialog.getOpenFileName(self, 'Öppna säkerthetskopia', '.') with open(filename, 'rb') as f: data = pickle.Unpickler(f).load() if restore_everything(self.session, data): self.session.commit() self.populateMemberList() def createMember(self): newmemberdialog = NewMemberDialog(self.session, self) newmemberdialog.exec() def removeMember(self): """Remove selected member.""" member = self.currentMember() wholename = member.getWholeName() confirm = "Är du säker att du vill ta bort användaren %s?" % wholename reply = QMessageBox.question(self, 'Bekräfta', confirm, QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: self.session.delete(member) self.session.commit() self.populateMemberList() self.setStatusMessage("Användare %s borttagen!" % wholename) def populateMemberList(self, choosemember=None): """Fill the memberlist from the database.""" self.memberlist = self.session.query(Member).order_by( Member.surName_fld).all() self.ui.searchfield.clear() self.searchlist() if choosemember: memberindex = self.memberlist.index(choosemember) self.ui.memberlistwidget.setCurrentRow(memberindex) def currentMember(self): """Returns the currently selected member.""" member = self.filteredmemberlist[self.ui.memberlistwidget.currentRow()] return member def editMember(self): """Edit the currently selected member.""" member = self.currentMember() self.membereditwidget = MemberEdit(self.session, member, self, self.ldapmanager) self.membereditwidget.show() def searchlist(self, pattern=''): """Perform a filter operation on the memberlist. pattern -- The string to match. """ self.filteredmemberlist = [member for member in self.memberlist if member.getWholeName().upper().find(pattern.upper()) != -1] self.ui.memberlistwidget.clear() for member in self.filteredmemberlist: self.ui.memberlistwidget.addItem(member.getWholeName()) def showMemberInfo(self, member=None): """Show the member's info in the panel below. member -- backend.orm.Member to show. """ if not member: member = self.currentMember() contactinfo = member.contactinfo memberinfo = """Namn: %s %s Address: %s %s %s %s Telefon: %s Mobiltelefon: %s Email: %s Användarnamn: %s """ % ( member.givenNames_fld, member.surName_fld, contactinfo.streetAddress_fld, contactinfo.postalCode_fld, contactinfo.city_fld, contactinfo.country_fld, contactinfo.phone_fld, contactinfo.cellPhone_fld, contactinfo.email_fld, member.username_fld ) membershipinfo = self.getMembershipInfo(member) self.ui.memberinfo.setText(memberinfo + membershipinfo) def getMembershipInfo(self, member): """Get the current membershipinfo for a member. member -- backend.orm.Member Used in showMemberInfo""" currentposts = [postmembership.post.name_fld for postmembership in member.postmemberships if postmembership.isCurrent()] currentgroups = [groupmembership.group.name_fld for groupmembership in member.groupmemberships if groupmembership.isCurrent()] return ("\n".join(["\nPoster:"] + currentposts) + "\n".join(["\n\nGrupper:"] + currentgroups)) def setStatusMessage(self, message, milliseconds=3000): """Sets a status message in the MainWindow. message -- The status message to set. milliseconds -- The lifetime of the message. """ self.ui.statusbar.showMessage(message, milliseconds)
class TrabalhoComputacaoGrafica(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.createObjects() self.setup() self.world.add_polygn('Teste', [(30,30), (50,30), (50,50), (30,50)]) self.ui.edWindowFactor.setText('5') def createObjects(self): self.viewport = ViewPort() self.world = World() self.window = Window(self.viewport) self.world.add_window(self.window) self.world.connect_add_event(self.add_object) def setup(self): self.ui.gvMain.setScene(self.viewport) self.ui.lvObjects.contextMenuEvent = self.lvContextMenuEvent self.ui.lvObjects.connect(SIGNAL("itemClicked(QListWidgetItem *)"), self.itemClick) self.ui.btWindowUp.clicked.connect(self.window_up) self.ui.btWindowDown.clicked.connect(self.window_down) self.ui.btWindowRight.clicked.connect(self.window_right) self.ui.btWindowLeft.clicked.connect(self.window_left) self.ui.btWindowZoomIn.clicked.connect(self.window_zoomin) self.ui.btWindowZoomOut.clicked.connect(self.window_zoomout) self.viewport.mousePressEvent = self.sceneClick self.ui.btTranslaction.clicked.connect(self.translaction) self.ui.btStagger.clicked.connect(self.stagger) self.ui.btRotate.clicked.connect(self.rotate) self.createActions() def translaction(self, *args): tx = self.ui.edXTranslaction.text().strip() ty = self.ui.edYTranslaction.text().strip() if not tx or not ty: return tx = int(tx) ty = int(ty) selected_list = self.ui.lvObjects.selectedItems() if not selected_list: return obj = selected_list[0].obj self.world.translate_object(obj, (tx, ty)) def stagger(self, *args): sx = self.ui.edXStagger.text().strip() sy = self.ui.edYStagger.text().strip() if not sx or not sy: return sx = int(sx) sy = int(sy) selected_list = self.ui.lvObjects.selectedItems() if not selected_list: return obj = selected_list[0].obj self.world.stagge_object(obj, (sx, sy)) def rotate(self, *args): degree = self.ui.edRotationDegree.text().strip() if not degree: return degree = int(degree) selected_list = self.ui.lvObjects.selectedItems() if not selected_list: return obj = selected_list[0].obj if self.ui.rbRotationCenterWorld.isChecked(): x = (self.viewport.xmax-self.viewport.xmin)/2.0 y = (self.viewport.ymax-self.viewport.ymin)/2.0 self.world.rotate_object(obj, degree, x, y) elif self.ui.rbRotationCenterObject.isChecked(): self.world.rotate_object(obj, degree) else: x = int(self.ui.edXRotationSpecific.text()) y = int(self.ui.edYRotationSpecific.text()) self.world.rotate_object(obj, degree, x, y) def itemClick(self, item): self.world.select_object(item.obj) def sceneClick(self, event): pos = event.scenePos() obj = self.window.get_object_on_viewport(pos.x(), pos.y()) if obj: self.world.select_object(obj) self.select_object_on_list(obj) def select_object_on_list(self, obj): for i in range(self.ui.lvObjects.count()): if self.ui.lvObjects.item(i).obj == obj: self.ui.lvObjects.item(i).setSelected(True) def window_up(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.move_up(factor) def window_down(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.move_down(factor) def window_right(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.move_right(factor) def window_left(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.move_left(factor) def window_zoomin(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.zoomin(factor) def window_zoomout(self, *args): factor = self.ui.edWindowFactor.text().strip() if not factor: return factor = int(factor) self.window.zoomout(factor) def createActions(self): self.NewObjectAct = QtGui.QAction("Novo objeto", self, statusTip="Cria um novo objeto", triggered=self.newObject) def newObject(self): obj = TrabalhoComputacaoGraficaObject(self) obj.show() def lvContextMenuEvent(self, event): menu = QtGui.QMenu(self) menu.addAction(self.NewObjectAct) menu.exec_(event.globalPos()) def add_object(self, obj): self.ui.lvObjects.clear() for obj in self.world.obj_list: item = ObjectItem(obj) self.ui.lvObjects.addItem(item)
class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowIcon(QIcon('icon.png')) self.ui.actionLoad_Lyrics.triggered.connect(self._load_lyrics_thread) self.cb_backends() # about widget self.aboutUi = About() self.ui.actionAbout.triggered.connect(self._about) self.aboutUi.setWindowModality(Qt.WindowModal) self._load_lyrics_thread() def cb_backends(self): self.cb_backends = QComboBox() self.cb_backends.addItem('Auto') menuLyricSource = QMenu(self.ui.menuEdit) menuLyricSource.setTitle('Lyric source') self.lyricGroup = QActionGroup(self) def addAction(name, checked=False): action = QAction(name, self) action.setText(name) action.setCheckable(True) action.setChecked(checked) action.setActionGroup(self.lyricGroup) return action menuLyricSource.addAction(addAction('Auto', True)) menuLyricSource.addSeparator() menuLyricSource.triggered.connect(self._menu_backend_change) for backend in Pyrics.get_backends(): menuLyricSource.addAction(addAction(backend.__name__)) self.cb_backends.addItem(backend.__name__) self.ui.menuEdit.addMenu(menuLyricSource) self.ui.toolBar.addWidget(self.cb_backends) self.cb_backends.currentIndexChanged.connect(self._cb_backend_change) def _load_lyrics_thread(self): self.thread = LoadLyricsWorker(self.cb_backends.currentIndex(), self) self.thread.trigger.connect(self._load_lyrics) self.thread.start() def _load_lyrics(self, content): self.ui.txLyrics.setText(content) def _about(self): self.aboutUi.show() def _menu_backend_change(self, action): index = self.cb_backends.findText(action.text()) self._update_backend(index) def _cb_backend_change(self, item): self._update_backend(item) def _update_backend(self, index): """Keep lyrics source combo in sync with the lyrics source in the menu""" if index >= 0: self.cb_backends.setCurrentIndex(index) name = self.cb_backends.currentText() for action in self.lyricGroup.actions(): action.setChecked(False) if action.text() == name: action.setChecked(True)
def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.lcdcurrent.display("00:00") self.ui.lcdtotal.display("00:00") self.PORT = False self.SHOW = False self.songs = [] self.chosen = 0 ###### WINDOW SETTINGS ###### try: self.setAttribute(QtCore.Qt.WA_Maemo5StackedWindow, True) self.setAttribute(QtCore.Qt.WA_Maemo5AutoOrientation, True); except: pass self.setWindowTitle("MaAmp - Offline") # Should show artist name here self.connect(QtGui.QApplication.desktop(), QtCore.SIGNAL("resized(int)"), self.orientationChanged ); ### SETUP CUSTOM LABEL, PUSHLABEL ### self.ui.cover_art = pushLabel(self) self.ui.cover_art.setGeometry(QtCore.QRect(20, 35, 280, 280)) self.ui.cover_art.setScaledContents(True) #self.ui.cover_art.setPixmap(QtGui.QPixmap(current[3])) self.ui.cover_art.setPixmap(QtGui.QPixmap(os.path.dirname(os.path.realpath( __file__ ) )+"/empty.png")) self.connect(self.ui.cover_art, QtCore.SIGNAL("clicked()"),self.animate) ### INIT THINGS ### self.getconnected() self.disablebuttons() ### ACTIONBUTTONS (MENU) ### self.connect(self.ui.actionConfigure, QtCore.SIGNAL("triggered()"),self.configure) self.connect(self.ui.actionAbout, QtCore.SIGNAL("triggered()"),self.about) self.connect(self.ui.actionFM_Radio, QtCore.SIGNAL('triggered()'), self.fmradio) self.connect(self.ui.actionClearRefresh, QtCore.SIGNAL('triggered()'), self.clearrefresh) ### BUTTONS ### self.connect(self.ui.artistsButton, QtCore.SIGNAL("clicked()"),self.listartists) #self.connect(self.ui.albumsButton, QtCore.SIGNAL("clicked()"),self.listalbums) ### PLAYER BUTTONS ### self.connect(self.ui.playButton, QtCore.SIGNAL("clicked()"),self.play) self.connect(self.ui.stopButton, QtCore.SIGNAL("clicked()"),self.stop) self.connect(self.ui.nextButton, QtCore.SIGNAL("clicked()"),self.next) self.connect(self.ui.previousButton, QtCore.SIGNAL("clicked()"),self.prev) self.connect(self.ui.listWidget, QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.itemClicked) ### INIT ALL ANIMATIONS ### self.f_animate = QtCore.QPropertyAnimation(self.ui.frame, "geometry") self.f_animate.setDuration(ANIMSPEED) self.f2_animate = QtCore.QPropertyAnimation(self.ui.frame_2, "geometry") self.f2_animate.setDuration(ANIMSPEED) self.l_animate = QtCore.QPropertyAnimation(self.ui.listWidget, "geometry") self.l_animate.setDuration(ANIMSPEED) ### ANIMATION GEOMETRY ### ### PORTRAIT ### self.fp_visible = QtCore.QRect(35, 655, 411, 91) self.fp_invisible = QtCore.QRect (35, 810, 411, 91) self.f2p_visible = QtCore.QRect (0, 330, 480, 311) self.f2p_invisible = QtCore.QRect (490, 330, 480, 311) self.lp_visible = QtCore.QRect (0, 330, 480, 430) self.lp_invisible = QtCore.QRect (490, 330, 480, 430) ### LANDSCAPE ### self.fl_visible = QtCore.QRect (360, 330, 411, 91) self.fl_invisible = QtCore.QRect (360, 490, 411, 91) self.f2l_visible = QtCore.QRect (320, 5, 480, 311) self.f2l_invisible = QtCore.QRect (810, 5, 480, 311) self.ll_visible = QtCore.QRect (320, 0, 480, 430) self.ll_invisible = QtCore.QRect (810, 0, 480, 430) ### SETUP & INIT PHONON SOUND ### self.mediaObject = Phonon.createPlayer(Phonon.MusicCategory) self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory) #print self.audioOutput.outputDevice().name() self.mediaObject.setTickInterval(1000) self.mediaObject.tick.connect(self.tick) self.mediaObject.stateChanged.connect(self.stateChanged) self.mediaObject.currentSourceChanged.connect(self.sourceChanged) self.mediaObject.aboutToFinish.connect(self.aboutToFinish) self.mediaObject.finished.connect(self.finished) ### CREATE AND CONNCT SEEKSLIDER TO PHONON ### self.ui.seekSlider = Phonon.SeekSlider(self.mediaObject,self.ui.frame_2) self.ui.seekSlider.setGeometry(QtCore.QRect(10, 245, 268, 61)) self.ui.seekSlider.setOrientation(QtCore.Qt.Horizontal) self.ui.seekSlider.setObjectName("seekSlider") ### JUST TO UPDATE SCREEN... HMMM.... ### self.animate()
class MainWin(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.lcdcurrent.display("00:00") self.ui.lcdtotal.display("00:00") self.PORT = False self.SHOW = False self.songs = [] self.chosen = 0 ###### WINDOW SETTINGS ###### try: self.setAttribute(QtCore.Qt.WA_Maemo5StackedWindow, True) self.setAttribute(QtCore.Qt.WA_Maemo5AutoOrientation, True); except: pass self.setWindowTitle("MaAmp - Offline") # Should show artist name here self.connect(QtGui.QApplication.desktop(), QtCore.SIGNAL("resized(int)"), self.orientationChanged ); ### SETUP CUSTOM LABEL, PUSHLABEL ### self.ui.cover_art = pushLabel(self) self.ui.cover_art.setGeometry(QtCore.QRect(20, 35, 280, 280)) self.ui.cover_art.setScaledContents(True) #self.ui.cover_art.setPixmap(QtGui.QPixmap(current[3])) self.ui.cover_art.setPixmap(QtGui.QPixmap(os.path.dirname(os.path.realpath( __file__ ) )+"/empty.png")) self.connect(self.ui.cover_art, QtCore.SIGNAL("clicked()"),self.animate) ### INIT THINGS ### self.getconnected() self.disablebuttons() ### ACTIONBUTTONS (MENU) ### self.connect(self.ui.actionConfigure, QtCore.SIGNAL("triggered()"),self.configure) self.connect(self.ui.actionAbout, QtCore.SIGNAL("triggered()"),self.about) self.connect(self.ui.actionFM_Radio, QtCore.SIGNAL('triggered()'), self.fmradio) self.connect(self.ui.actionClearRefresh, QtCore.SIGNAL('triggered()'), self.clearrefresh) ### BUTTONS ### self.connect(self.ui.artistsButton, QtCore.SIGNAL("clicked()"),self.listartists) #self.connect(self.ui.albumsButton, QtCore.SIGNAL("clicked()"),self.listalbums) ### PLAYER BUTTONS ### self.connect(self.ui.playButton, QtCore.SIGNAL("clicked()"),self.play) self.connect(self.ui.stopButton, QtCore.SIGNAL("clicked()"),self.stop) self.connect(self.ui.nextButton, QtCore.SIGNAL("clicked()"),self.next) self.connect(self.ui.previousButton, QtCore.SIGNAL("clicked()"),self.prev) self.connect(self.ui.listWidget, QtCore.SIGNAL("itemClicked(QListWidgetItem*)"), self.itemClicked) ### INIT ALL ANIMATIONS ### self.f_animate = QtCore.QPropertyAnimation(self.ui.frame, "geometry") self.f_animate.setDuration(ANIMSPEED) self.f2_animate = QtCore.QPropertyAnimation(self.ui.frame_2, "geometry") self.f2_animate.setDuration(ANIMSPEED) self.l_animate = QtCore.QPropertyAnimation(self.ui.listWidget, "geometry") self.l_animate.setDuration(ANIMSPEED) ### ANIMATION GEOMETRY ### ### PORTRAIT ### self.fp_visible = QtCore.QRect(35, 655, 411, 91) self.fp_invisible = QtCore.QRect (35, 810, 411, 91) self.f2p_visible = QtCore.QRect (0, 330, 480, 311) self.f2p_invisible = QtCore.QRect (490, 330, 480, 311) self.lp_visible = QtCore.QRect (0, 330, 480, 430) self.lp_invisible = QtCore.QRect (490, 330, 480, 430) ### LANDSCAPE ### self.fl_visible = QtCore.QRect (360, 330, 411, 91) self.fl_invisible = QtCore.QRect (360, 490, 411, 91) self.f2l_visible = QtCore.QRect (320, 5, 480, 311) self.f2l_invisible = QtCore.QRect (810, 5, 480, 311) self.ll_visible = QtCore.QRect (320, 0, 480, 430) self.ll_invisible = QtCore.QRect (810, 0, 480, 430) ### SETUP & INIT PHONON SOUND ### self.mediaObject = Phonon.createPlayer(Phonon.MusicCategory) self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory) #print self.audioOutput.outputDevice().name() self.mediaObject.setTickInterval(1000) self.mediaObject.tick.connect(self.tick) self.mediaObject.stateChanged.connect(self.stateChanged) self.mediaObject.currentSourceChanged.connect(self.sourceChanged) self.mediaObject.aboutToFinish.connect(self.aboutToFinish) self.mediaObject.finished.connect(self.finished) ### CREATE AND CONNCT SEEKSLIDER TO PHONON ### self.ui.seekSlider = Phonon.SeekSlider(self.mediaObject,self.ui.frame_2) self.ui.seekSlider.setGeometry(QtCore.QRect(10, 245, 268, 61)) self.ui.seekSlider.setOrientation(QtCore.Qt.Horizontal) self.ui.seekSlider.setObjectName("seekSlider") ### JUST TO UPDATE SCREEN... HMMM.... ### self.animate() ### STILL PHONON ### def play(self): QtGui.QApplication.processEvents() playing = (self.mediaObject.state() == Phonon.PlayingState) if not playing: self.ui.lcdtotal.display(self.current_song[4]) self.mediaObject.play() else: self.mediaObject.pause() try: self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, False); except: pass def stop(self): self.ui.playButton.setText("Play") self.mediaObject.stop() def prev(self): QtGui.QApplication.processEvents() try: self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True); except: pass self.chosen = self.chosen - 1 if self.chosen < 0: self.chosen = len(self.songs)-1 self.ui.listWidget.setCurrentRow(self.chosen) self.url = self.amp.getSongurl(self.songs[self.chosen][6]) self.current_song = self.songs[self.chosen] self.ui.songLabel.setText(self.songs[self.chosen][1]) self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs))) self.ui.artistLabel.setText(self.songs[self.chosen][2]) self.ui.albumLabel.setText(self.songs[self.chosen][3]) self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url)) self.ui.seekSlider.setMediaObject(self.mediaObject) self.play() def next(self): QtGui.QApplication.processEvents() try: self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True); except: pass self.chosen = self.chosen + 1 if self.chosen > len(self.songs): self.chosen = 0 self.ui.listWidget.setCurrentRow(self.chosen) self.url = self.amp.getSongurl(self.songs[self.chosen][6]) self.current_song = self.songs[self.chosen] self.ui.songLabel.setText(self.songs[self.chosen][1]) self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs))) self.ui.artistLabel.setText(self.songs[self.chosen][2]) self.ui.albumLabel.setText(self.songs[self.chosen][3]) self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url)) self.ui.seekSlider.setMediaObject(self.mediaObject) self.play() def stateChanged(self, newState, oldState): if newState == Phonon.ErrorState: if self.mediaObject.errorType() == Phonon.FatalError: QtGui.QMessageBox.warning(self, "Fatal Error", self.mediaObject.errorString()) else: QtGui.QMessageBox.warning(self, "Error", self.mediaObject.errorString()) elif newState == Phonon.PlayingState: self.ui.playButton.setText("Pause") elif newState == Phonon.StoppedState: self.ui.lcdcurrent.display("00:00") elif newState == Phonon.PausedState: self.ui.playButton.setText("Play") def tick(self, time): displayTime = QtCore.QTime(0, (time / 60000) % 60, (time / 1000) % 60) self.ui.lcdcurrent.display(displayTime.toString('mm:ss')) def sourceChanged(self, source): pass def aboutToFinish(self): ### SO WE DONT HAVE TO WAIT FOR AMPACHEE-AUTH WHEN PLAYING NEXT ### if not self.amp.is_authenticated(): self.amp.authenticate() def finished(self): self.next() ### PHONON FINISHED ### ### ENABLE BUTTONS (IF ALBUM IS LOADED) ### def enablebuttons(self): self.ui.cover_art.setEnabled(True) self.ui.playButton.setEnabled(True) self.ui.stopButton.setEnabled(True) self.ui.nextButton.setEnabled(True) self.ui.previousButton.setEnabled(True) ### DISABLE BUTTONS (IF NO ALBUM IS LOADED) def disablebuttons(self): self.ui.cover_art.setEnabled(False) self.ui.playButton.setEnabled(False) self.ui.stopButton.setEnabled(False) self.ui.nextButton.setEnabled(False) self.ui.previousButton.setEnabled(False) ### TRY TO CONNECT TO AMPACHE ### def getconnected(self): ### GET AMACHE CONFIGURATION AND STUFF ### self.amp = ampache() self.config = self.amp.getconfig() if not self.config[0] == "http://": if self.amp.authenticate(): self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connected", None, QtGui.QApplication.UnicodeUTF8)) self.ui.actionClearRefresh.setEnabled(True) self.ui.actionFM_Radio.setEnabled(True) self.ui.actionConnect.setChecked(True) self.artists = self.amp.getArtists() self.setWindowTitle("MaAmp - Online") ONLINE = True self.ui.frame.setEnabled(True) try: QMaemo5InformationBox.information(None, "Connected ... :)", 5000) except: pass else: self.setWindowTitle("MaAmp - Offline") self.ui.frame.setEnabled(False) self.ui.cover_art.setEnabled(False) self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8)) self.ui.actionClearRefresh.setEnabled(False) self.ui.actionFM_Radio.setEnabled(False) self.ui.actionConnect.setChecked(False) ONLINE = False else: self.setWindowTitle("MaAmp - Offline") self.ui.frame.setEnabled(False) self.ui.cover_art.setEnabled(False) self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8)) self.ui.actionClearRefresh.setEnabled(False) self.ui.actionFM_Radio.setEnabled(False) self.ui.actionConnect.setChecked(False) ONLINE = False #try: QMaemo5InformationBox.information(None, "You need to configure MaAmp!", 5000) #except: # pass def about(self): ad = AboutDialog(self) if self.PORT: ad.resize(480, 650) else: ad.resize(800, 400) ad.show() def configure(self): cd = ConfigDialog(self) ### SETUP UI ### if self.PORT: cd.resize(480, 267) else: cd.resize(800, 267) self.cdui = Ui_Config() self.cdui.setupUi(cd) self.cdui.serverEdit.setText(self.config[0]) self.cdui.userEdit.setText(self.config[1]) self.cdui.passwordEdit.setText(self.config[2]) self.cdui.autoLoginCheck.setChecked(self.config[3]) cd.show() if cd.exec_() == 1: self.config = [self.cdui.serverEdit.text(),self.cdui.userEdit.text(),self.cdui.passwordEdit.text(),self.cdui.autoLoginCheck.isChecked()] cd.destroy() self.amp.setconfig(self.config) if self.config[3] == True: self.getconnected() def itemClicked(self,item): QtGui.QApplication.processEvents() try: self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True); except: pass self.animate() if self.ui.listWidget.row(item) < 0: self.chosen = 1 else: self.chosen = self.ui.listWidget.row(item) self.url = self.amp.getSongurl(self.songs[self.chosen][6]) self.current_song = self.songs[self.chosen] self.ui.songLabel.setText(self.songs[self.chosen][1]) self.ui.songsLabel.setText("Songs: "+str(self.current_song[0])+"/"+str(len(self.songs))) self.ui.artistLabel.setText(self.songs[self.chosen][2]) self.ui.albumLabel.setText(self.songs[self.chosen][3]) self.ui.lcdtotal.display(self.current_song[4]) self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url)) self.ui.seekSlider.setMediaObject(self.mediaObject) self.ui.seekSlider.setEnabled(True) self.play() self.ui.playButton.setText("Pause") def clearrefresh(self): result = self.amp.clearCache() self.artists = result def orientationChanged ( self ): #called when N900 is rotated screenGeometry=QtGui.QApplication.desktop().screenGeometry(); if screenGeometry.width() > screenGeometry.height(): #landscape if self.SHOW: # SHOW FRAMES, HIDE LISTWIDGET self.ui.frame.setGeometry(self.fl_visible) self.ui.frame_2.setGeometry(self.f2l_visible) self.ui.listWidget.setGeometry(self.ll_invisible) else: # SHOW LISTWIDGET, HIDE FRAMES self.ui.frame.setGeometry(self.fl_invisible) self.ui.frame_2.setGeometry(self.f2l_invisible) self.ui.listWidget.setGeometry(self.ll_visible) self.ui.artistsButton.setGeometry(QtCore.QRect(10, 340, 141, 71)) self.ui.playlistButton.setGeometry(QtCore.QRect(160, 340, 141, 71)) self.PORT = False else: #portrait if self.SHOW: # SHOW FRAMES, HIDE LISTWIDGET self.ui.frame.setGeometry(self.fp_visible) self.ui.frame_2.setGeometry(self.f2p_visible) self.ui.listWidget.setGeometry(self.lp_invisible) else: # SHOW LISTWIDGET, HIDE FRAMES self.ui.frame.setGeometry(self.fp_invisible) self.ui.frame_2.setGeometry(self.f2p_invisible) self.ui.listWidget.setGeometry(self.lp_visible) self.ui.artistsButton.setGeometry(QtCore.QRect(330, 140, 141, 71)) self.ui.playlistButton.setGeometry(QtCore.QRect(330, 220, 141, 71)) self.PORT = True def animate(self): if self.PORT: if self.SHOW: # SHOW LISTWIDGET, HIDE FRAMES self.f_animate.setStartValue(self.fp_visible) self.f_animate.setEndValue(self.fp_invisible) self.f2_animate.setStartValue(self.f2p_visible) self.f2_animate.setEndValue(self.f2p_invisible) self.l_animate.setStartValue(self.lp_invisible) self.l_animate.setEndValue(self.lp_visible) self.SHOW = False else: # SHOW FRAMES HIDE LISTWIDGET self.f_animate.setStartValue(self.fp_invisible) self.f_animate.setEndValue(self.fp_visible) self.f2_animate.setStartValue(self.f2p_invisible) self.f2_animate.setEndValue(self.f2p_visible) self.l_animate.setStartValue(self.lp_visible) self.l_animate.setEndValue(self.lp_invisible) self.SHOW = True else: if self.SHOW: # SHOW LISTWIDGET HIDE FRAMES self.f_animate.setStartValue(self.fl_visible) self.f_animate.setEndValue(self.fl_invisible) self.f2_animate.setStartValue(self.f2l_visible) self.f2_animate.setEndValue(self.f2l_invisible) self.l_animate.setStartValue(self.ll_invisible) self.l_animate.setEndValue(self.ll_visible) self.SHOW = False else: # SHOW FRAMES, HIDE LISTWIDGET self.f_animate.setStartValue(self.fl_invisible) self.f_animate.setEndValue(self.fl_visible) self.f2_animate.setStartValue(self.f2l_invisible) self.f2_animate.setEndValue(self.f2l_visible) self.l_animate.setStartValue(self.ll_visible) self.l_animate.setEndValue(self.ll_invisible) self.SHOW = True self.f_animate.start() self.f2_animate.start() self.l_animate.start() def connected(self): if self.ONLINE: self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connected", None, QtGui.QApplication.UnicodeUTF8)) self.getconnected() self.ONLINE = True else: self.ui.actionConnect.setText(QtGui.QApplication.translate("MainWindow", "Connect", None, QtGui.QApplication.UnicodeUTF8)) self.disablebuttons() self.ONLINE = False # BORROWED FROM PYRADIO! # def fmradio(self, initial=False): #Turn on FM transmitter try : #test for FM transmitter. sysbus = dbus.SystemBus() fmtx = sysbus.get_object('com.nokia.FMTx', '/com/nokia/fmtx/default', False) fmtx_iface = dbus.Interface(fmtx, dbus_interface='org.freedesktop.DBus.Properties') state = fmtx_iface.Get("com.nokia.FMTx.Device", "state") if state == 'disabled': if not initial: self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Disable FM", None, QtGui.QApplication.UnicodeUTF8)) fmtx_iface.Set("com.nokia.FMTx.Device", "state", dbus.String(u'%s' % 'enabled', variant_level=1)) else: self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Enable FM", None, QtGui.QApplication.UnicodeUTF8)) else: if not initial: self.ui.actionFM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Enable FM", None, QtGui.QApplication.UnicodeUTF8)) fmtx_iface.Set("com.nokia.FMTx.Device", "state", dbus.String(u'%s' % 'disabled', variant_level=1)) else: self.ui.actionEnable_FM_Radio.setText(QtGui.QApplication.translate("MainWindow", "Disable FM", None, QtGui.QApplication.UnicodeUTF8)) except: print "No FM Transmitter." ########################### def listartists(self): if not self.amp.is_authenticated(): self.getconnected() self.ArtistWin = ArtistWin(self) try: self.ArtistWin.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, True); except: pass self.ArtistWin.setWindowTitle("All Artists ("+str(len(self.artists))+")") self.ArtistWin.show() self.ArtistWin.artists(self.artists) def selectedAristAlbum(self,artist_id): album = self.amp.getAlbums(artist_id) self.selectedAlbum(album,0) def selectedAlbum(self,album,nr): QtGui.QApplication.processEvents() self.songs = self.amp.getSongs(album[nr][0]) self.ui.cover_art.setPixmap(QtGui.QPixmap(album[nr][3])) self.ui.songLabel.setText(self.songs[0][1]) self.ui.artistLabel.setText(self.songs[0][2]) self.ui.albumLabel.setText(self.songs[0][3]) self.ui.yearLabel.setText("Year: "+album[nr][6]) self.ui.songsLabel.setText("Songs: 1/"+str(album[nr][2])) self.ui.tagsLabel.setText(album[nr][7]) self.ui.listWidget.clear() for row in self.songs: self.ui.listWidget.addItem(row[1]) self.url = self.amp.getSongurl(self.songs[0][6]) self.current_song = self.songs[0] self.ui.lcdtotal.display(self.current_song[4]) wasPlaying = (self.mediaObject.state() == Phonon.PlayingState) if wasPlaying: self.stop() self.mediaObject.setCurrentSource(Phonon.MediaSource(self.url)) self.ui.seekSlider.setMediaObject(self.mediaObject) self.enablebuttons() self.SHOW = True self.animate() try: self.setAttribute(QtCore.Qt.WA_Maemo5ShowProgressIndicator, False); except: pass
class SoftwareCenter(QMainWindow): # fx(software, category) map scmap = {} # fx(page, softwares) map psmap = {} # recommend number in fill func recommendNumber = 0 # now page nowPage = '' # search delay timer searchDTimer = '' def __init__(self,parent=None): QMainWindow.__init__(self,parent) # ui self.ui_init() # logic self.tmp_get_category() self.tmp_get_category_software() # from backend.ibackend import get_backend # self.bk = get_backend() # sl = self.bk.get_all_packages() # # self.check_software() self.psmap[self.ui.allsListWidget] = [] self.psmap[self.ui.upListWidget] = [] self.psmap[self.ui.unListWidget] = [] # test self.ui.leSearch.setPlaceholderText("请输入想要搜索的软件") self.ui.allsMSGBar.setText("已安装软件 ") self.ui.bottomText1.setText("UK软件中心:") self.ui.bottomText2.setText("1.0.12") # self.tmp_fill_recommend_softwares() # self.tmp_get_ads() self.ui.categoryView.setEnabled(False) self.ui.btnUp.setEnabled(False) self.ui.btnUn.setEnabled(False) self.ui.btnTask.setEnabled(False) self.slot_goto_homepage() # from backend.ibackend import get_backend # self.bk = get_backend() self.connect(data.backend, SIGNAL("getallpackagesover"), self.slot_get_all_packages_over) at = AsyncThread(data.backend.get_all_packages) at.setDaemon(True) at.start() # from multiprocessing import Process,Queue # q = Queue() # q.put(data.softwareList) # p = Process(target=self.check_software,args=(q,)) # p.start() # data.softwareList = q.get() # print len(data.softwareList) # p.join() # self.connect(data.sbo, SIGNAL("countiover"), self.slot_count_installed_over) # at = AsyncThread(data.sbo.count_installed_software) # at.setDaemon(True) # at.start() # # self.connect(data.sbo, SIGNAL("countuover"), self.slot_count_upgradable_over) # at = AsyncThread(data.sbo.count_upgradable_software) # at.setDaemon(True) # at.start() self.btntesttask = QPushButton(self.ui.taskWidget) self.btntesttask.setGeometry(400,20,100,30) self.raise_() self.btntesttask.clicked.connect(self.slot_testtask) def slot_testtask(self): software = data.sbo.get_software_by_name("firefox") oneitem = QListWidgetItem() tliw = TaskListItemWidget(software) self.ui.taskListWidget.addItem(oneitem) self.ui.taskListWidget.setItemWidget(oneitem, tliw) import time for i in range(100): tliw.ui.progressBar.setValue(i+1) time.sleep(0.02) def ui_init(self): self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle("Ubuntu Kylin Software-Center") self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground, True) self.ui.headerWidget.installEventFilter(self) self.ui.categoryView.itemClicked.connect(self.slot_change_category) self.ui.allsListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.upListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.unListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.btnHomepage.pressed.connect(self.slot_goto_homepage) self.ui.btnUp.pressed.connect(self.slot_goto_uppage) self.ui.btnUn.pressed.connect(self.slot_goto_unpage) self.ui.btnTask.pressed.connect(self.slot_goto_taskpage) self.ui.btnClose.clicked.connect(self.slot_close) self.ui.btnMin.clicked.connect(self.slot_min) self.connect(data.backend, SIGNAL("backendmsg"), self.slot_backend_msg) # style by code self.ui.headerWidget.setAutoFillBackground(True) palette = QPalette() img = QPixmap("res/header.png") palette.setBrush(QPalette.Window, QBrush(img)) self.ui.headerWidget.setPalette(palette) self.ui.bottomWidget.setAutoFillBackground(True) palette = QPalette() img = QPixmap("res/foot.png") palette.setBrush(QPalette.Window, QBrush(img)) self.ui.bottomWidget.setPalette(palette) self.ui.categoryView.setFocusPolicy(Qt.NoFocus) self.ui.btnDay.setFocusPolicy(Qt.NoFocus) self.ui.btnWeek.setFocusPolicy(Qt.NoFocus) self.ui.btnMonth.setFocusPolicy(Qt.NoFocus) self.ui.btnDownTimes.setFocusPolicy(Qt.NoFocus) self.ui.btnGrade.setFocusPolicy(Qt.NoFocus) self.ui.btnClose.setFocusPolicy(Qt.NoFocus) self.ui.btnMin.setFocusPolicy(Qt.NoFocus) self.ui.btnSkin.setFocusPolicy(Qt.NoFocus) self.ui.btnConf.setFocusPolicy(Qt.NoFocus) self.ui.btnBack.setFocusPolicy(Qt.NoFocus) self.ui.btnNext.setFocusPolicy(Qt.NoFocus) self.ui.btnHomepage.setFocusPolicy(Qt.NoFocus) self.ui.btnUp.setFocusPolicy(Qt.NoFocus) self.ui.btnUn.setFocusPolicy(Qt.NoFocus) self.ui.btnTask.setFocusPolicy(Qt.NoFocus) self.ui.allsListWidget.setFocusPolicy(Qt.NoFocus) self.ui.upListWidget.setFocusPolicy(Qt.NoFocus) self.ui.unListWidget.setFocusPolicy(Qt.NoFocus) self.ui.taskListWidget.setFocusPolicy(Qt.NoFocus) self.ui.allsWidget.hide() self.ui.upWidget.hide() self.ui.unWidget.hide() self.ui.taskWidget.hide() self.show() # style by qss self.ui.btnBack.setStyleSheet("QPushButton{background-image:url('res/nav-back-1.png');border:0px;}QPushButton:hover{background:url('res/nav-back-2.png');}QPushButton:pressed{background:url('res/nav-back-3.png');}") self.ui.btnNext.setStyleSheet("QPushButton{background-image:url('res/nav-next-1.png');border:0px;}QPushButton:hover{background:url('res/nav-next-2.png');}QPushButton:pressed{background:url('res/nav-next-3.png');}") self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}") self.ui.logoImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}") self.ui.searchicon.setStyleSheet("QLabel{background-image:url('res/search.png')}") self.ui.leSearch.setStyleSheet("QLineEdit{border:1px solid #C3E0F4;border-radius:2px;padding-left:15px;color:#497FAB;font-size:13px;}") self.ui.userWidget.setStyleSheet("QWidget{background-color:#DDE4EA}") self.ui.userLabel.setStyleSheet("QLabel{background-image:url('res/item3')}") self.ui.item1Widget.setStyleSheet("QWidget{background-image:url('res/item1.png')}") self.ui.item2Widget.setStyleSheet("QWidget{background-image:url('res/item2.png')}") self.ui.btnClose.setStyleSheet("QPushButton{background-image:url('res/close-1.png');border:0px;}QPushButton:hover{background:url('res/close-2.png');}QPushButton:pressed{background:url('res/close-3.png');}") self.ui.btnMin.setStyleSheet("QPushButton{background-image:url('res/min-1.png');border:0px;}QPushButton:hover{background:url('res/min-2.png');}QPushButton:pressed{background:url('res/min-3.png');}") self.ui.btnSkin.setStyleSheet("QPushButton{background-image:url('res/skin-1.png');border:0px;}QPushButton:hover{background:url('res/skin-2.png');}QPushButton:pressed{background:url('res/skin-3.png');}") self.ui.btnConf.setStyleSheet("QPushButton{background-image:url('res/conf-1.png');border:0px;}QPushButton:hover{background:url('res/conf-2.png');}QPushButton:pressed{background:url('res/conf-3.png');}") self.ui.categoryView.setStyleSheet("QListWidget{border:0px;background-image:url('res/categorybg.png');}QListWidget::item{height:35px;padding-left:20px;margin-top:0px;border:0px;}QListWidget::item:hover{background:#CAD4E2;}QListWidget::item:selected{background-color:#6BB8DD;color:black;}") self.ui.categorytext.setStyleSheet("QLabel{background-image:url('res/categorybg.png');color:#7E8B97;font-weight:bold;padding-left:5px;}") self.ui.hline1.setStyleSheet("QLabel{background-image:url('res/hline1.png')}") self.ui.recommendWidget.setStyleSheet("QWidget{background-color:white}") self.ui.vline1.setStyleSheet("QLabel{background-color:#BBD1E4;}") self.ui.rankWidget.setStyleSheet("QWidget{background-color:white}") self.ui.rankLogo.setStyleSheet("QLabel{background-image:url('res/rankLogo.png')}") self.ui.rankText.setStyleSheet("QLabel{color:#7E8B97;font-size:13px;font-weight:bold;}") self.ui.btnDay.setStyleSheet("QPushButton{background-image:url('res/day1.png');border:0px;}") self.ui.btnWeek.setStyleSheet("QPushButton{background-image:url('res/week1.png');border:0px;}") self.ui.btnMonth.setStyleSheet("QPushButton{background-image:url('res/month1.png');border:0px;}") self.ui.btnDownTimes.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}") self.ui.btnGrade.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}") self.ui.rankView.setStyleSheet("QListWidget{border:0px;}") self.ui.bottomImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}") self.ui.bottomText1.setStyleSheet("QLabel{color:white;font-size:14px;}") self.ui.bottomText2.setStyleSheet("QLabel{color:white;font-size:14px;}") self.ui.allsMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.upMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.unMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.taskMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.allsHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.upHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.unHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.taskHeader.setStyleSheet("QLabel{background-image:url('res/taskwidgetheader.png')}") self.ui.allsListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.upListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.unListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.taskListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:45;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") def eventFilter(self, obj, event): if (obj == self.ui.headerWidget): if (event.type() == QEvent.MouseButtonPress): self.isMove = True # True only when click the blank place on header bar self.nowMX = event.globalX() self.nowMY = event.globalY() self.nowWX = self.x() self.nowWY = self.y() elif (event.type() == QEvent.MouseMove): if(self.isMove): incx = event.globalX() - self.nowMX incy = event.globalY() - self.nowMY self.move(self.nowWX + incx, self.nowWY + incy) elif (event.type() == QEvent.MouseButtonRelease): self.isMove = False return True def tmp_get_category(self): for c in os.listdir("res/category"): if(c == 'ubuntukylin'): oneitem = QListWidgetItem('Ubuntu Kylin') icon = QIcon() icon.addFile("res/" + c + ".png", QSize(), QIcon.Normal, QIcon.Off) oneitem.setIcon(icon) oneitem.setWhatsThis(c) self.ui.categoryView.addItem(oneitem) for c in os.listdir("res/category"): zhcnc = '' if(c == 'devel'): zhcnc = '编程开发' if(c == 'game'): zhcnc = '游戏娱乐' if(c == 'ubuntukylin'): continue # zhcnc = 'Ubuntu Kylin' if(c == 'office'): zhcnc = '办公软件' if(c == 'internet'): zhcnc = '网络工具' if(c == 'multimedia'): zhcnc = '影音播放' if(c == 'graphic'): zhcnc = '图形图像' if(c == 'profession'): zhcnc = '专业软件' if(c == 'other'): zhcnc = '其他软件' if(c == 'necessary'): zhcnc = '装机必备' oneitem = QListWidgetItem(zhcnc) icon = QIcon() icon.addFile("res/" + c + ".png", QSize(), QIcon.Normal, QIcon.Off) oneitem.setIcon(icon) oneitem.setWhatsThis(c) self.ui.categoryView.addItem(oneitem) def tmp_get_category_software(self): for c in os.listdir("res/category"): file = open(os.path.abspath("res/category/" + c), 'r') for line in file: self.scmap[line[:-1]] = c def tmp_get_ads(self): tmpads = [] tmpads.append(Advertisement("qq", "url", "ad1.png", "http://www.baidu.com")) tmpads.append(Advertisement("wps", "pkg", "ad2.png", "wps")) tmpads.append(Advertisement("qt", "pkg", "ad3.png", "qtcreator")) adw = ADWidget(tmpads, self) def tmp_fill_recommend_softwares(self): rnames = ['flashplugin-installer','vlc','openfetion','virtualbox'] for name in rnames: self.add_one_recommend_software(name) def add_one_recommend_software(self, name): for software in data.softwareList: if(software.name == name): x = 0 y = 0 recommend = RecommendItem(software,self.ui.recommendWidget) if(self.recommendNumber in (0, 1, 2)): y = 0 elif(self.recommendNumber in (3, 4, 5)): y = 88 else: y = 176 if(self.recommendNumber in (0, 3, 6)): x = 0 elif(self.recommendNumber in (1, 4, 7)): x = 176 else: x = 352 recommend.move(x, y) self.recommendNumber += 1 # delete packages from apt backend which not in category file def check_software(self, sl): slist = [] for c in os.listdir("res/category"): file = open(os.path.abspath("res/category/"+c), 'r') for line in file: slist.append(line[:-1]) i = 0 while i < len(sl): name = sl[i].name for name_ in slist: if name == name_: sl[i].category = self.scmap[name] break else: sl.pop(i) i -= 1 i += 1 self.emit(SIGNAL("chksoftwareover"), sl) def _check_software(self): slist = [] for c in os.listdir("res/category"): file = open(os.path.abspath("res/category/"+c), 'r') for line in file: slist.append(line[:-1]) data.sbo.get_all_software() i = 0 while i < len(data.softwareList): name = data.softwareList[i].name for name_ in slist: if name == name_: data.softwareList[i].category = self.scmap[name] break else: data.softwareList.pop(i) i -= 1 i += 1 self.emit(SIGNAL("chksoftwareover")) def show_more_software(self, listWidget): theRange = 0 if(len(self.psmap[listWidget]) < data.showSoftwareStep): theRange = len(self.psmap[listWidget]) else: theRange = data.showSoftwareStep for i in range(theRange): software = self.psmap[listWidget].pop(0) oneitem = QListWidgetItem() liw = ListItemWidget(software, self.nowPage) listWidget.addItem(oneitem) listWidget.setItemWidget(oneitem, liw) def switch_category(self): listWidget = self.get_current_listWidget() nowCategory = listWidget.whatsThis() if(self.nowPage == 'homepage'): self.ui.categoryView.clearSelection() else: if(nowCategory == ''): self.ui.categoryView.clearSelection() else: for i in range(self.ui.categoryView.count()): item = self.ui.categoryView.item(i) if(item.whatsThis() == nowCategory): item.setSelected(True) def get_current_listWidget(self): listWidget = '' if(self.nowPage == "homepage"): listWidget = self.ui.allsListWidget elif(self.nowPage == "uppage"): listWidget = self.ui.upListWidget elif(self.nowPage == "unpage"): listWidget = self.ui.unListWidget return listWidget #-------------------------------slots------------------------------- def slot_change_category(self, citem): listWidget = self.get_current_listWidget() category = str(citem.whatsThis()) trueCategory = listWidget.whatsThis() if(trueCategory == category): pass else: listWidget.scrollToTop() # if not, the func will trigger slot_softwidget_scroll_end() listWidget.setWhatsThis(category) # use whatsThis() to save each selected category listWidget.clear() self.psmap[listWidget] = [] for software in data.softwareList: if(software.category == category): if(self.nowPage == 'homepage'): self.psmap[listWidget].append(software) elif(self.nowPage == 'uppage'): if(software.is_upgradable): self.psmap[listWidget].append(software) elif(self.nowPage == 'unpage'): if(software.is_installed): self.psmap[listWidget].append(software) self.show_more_software(listWidget) # homepage is special if(self.nowPage == "homepage" and self.ui.allsWidget.isVisible() == False): self.ui.allsWidget.setVisible(True) def slot_softwidget_scroll_end(self, now): listWidget = self.get_current_listWidget() max = listWidget.verticalScrollBar().maximum() if(now == max): self.show_more_software(listWidget) def slot_goto_homepage(self): self.nowPage = 'homepage' self.ui.categoryView.setEnabled(True) self.switch_category() self.ui.homepageWidget.setVisible(True) self.ui.allsWidget.setVisible(False) self.ui.upWidget.setVisible(False) self.ui.unWidget.setVisible(False) self.ui.taskWidget.setVisible(False) self.ui.btnHomepage.setEnabled(False) self.ui.btnUp.setEnabled(True) self.ui.btnUn.setEnabled(True) self.ui.btnTask.setEnabled(True) self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-3.png');border:0px;}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}") def slot_goto_uppage(self): self.nowPage = 'uppage' self.ui.categoryView.setEnabled(True) self.switch_category() self.ui.homepageWidget.setVisible(False) self.ui.allsWidget.setVisible(False) self.ui.upWidget.setVisible(True) self.ui.unWidget.setVisible(False) self.ui.taskWidget.setVisible(False) self.ui.btnHomepage.setEnabled(True) self.ui.btnUp.setEnabled(False) self.ui.btnUn.setEnabled(True) self.ui.btnTask.setEnabled(True) self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-3.png');border:0px;}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}") def slot_goto_unpage(self): self.nowPage = 'unpage' self.ui.categoryView.setEnabled(True) self.switch_category() self.ui.homepageWidget.setVisible(False) self.ui.allsWidget.setVisible(False) self.ui.upWidget.setVisible(False) self.ui.unWidget.setVisible(True) self.ui.taskWidget.setVisible(False) self.ui.btnHomepage.setEnabled(True) self.ui.btnUp.setEnabled(True) self.ui.btnUn.setEnabled(False) self.ui.btnTask.setEnabled(True) self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-3.png');border:0px;}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}") def slot_goto_taskpage(self): self.nowPage = 'taskpage' self.ui.categoryView.setEnabled(False) self.ui.categoryView.clearSelection() self.ui.homepageWidget.setVisible(False) self.ui.allsWidget.setVisible(False) self.ui.upWidget.setVisible(False) self.ui.unWidget.setVisible(False) self.ui.taskWidget.setVisible(True) self.ui.btnHomepage.setEnabled(True) self.ui.btnUp.setEnabled(True) self.ui.btnUn.setEnabled(True) self.ui.btnTask.setEnabled(False) self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-3.png');border:0px;}") def slot_close(self): os._exit(0) def slot_min(self): self.showMinimized() def slot_click_ad(self, ad): if(ad.type == "pkg"): print ad.urlorpkgid elif(ad.type == "url"): webbrowser.open_new_tab(ad.urlorpkgid) def slot_get_all_packages_over(self, sl): print len(sl) self.connect(self, SIGNAL("chksoftwareover"), self.slot_check_software_over) at = AsyncThread(self.check_software, sl) at.setDaemon(True) at.start() # at = CheckSoftwareThread(sl, self.scmap) # at.setDaemon(True) # at.start() from multiprocessing import Process, Queue, Pipe # q = Queue() # q.put(sl) # ap = AsyncProcess(self.check_software) # ap.start() # from multiprocessing import Process,Queue # q = Queue() # q.put(sl) # sll = ['1','2','3','1','2','3'] # one = sl[0] # print one # pipe = Pipe() # p = Process(target=self.check_software,args=(pipe[1],)) # pipe[0].send(one) # p.start() # print q.get() # data.softwareList = q.get() # print len(data.softwareList) # p.join() def slot_check_software_over(self, sl): print len(sl) data.softwareList = sl self.tmp_fill_recommend_softwares() self.tmp_get_ads() self.ui.categoryView.setEnabled(True) self.ui.btnUp.setEnabled(True) self.ui.btnUn.setEnabled(True) self.ui.btnTask.setEnabled(True) self.ui.allsMSGBar.setText("所有软件 <font color='#009900'>" + str(len(data.softwareList)) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>") self.connect(data.sbo, SIGNAL("countiover"), self.slot_count_installed_over) at = AsyncThread(data.sbo.count_installed_software) at.setDaemon(True) at.start() self.connect(data.sbo, SIGNAL("countuover"), self.slot_count_upgradable_over) at = AsyncThread(data.sbo.count_upgradable_software) at.setDaemon(True) at.start() def slot_count_installed_over(self): print "iover..." self.ui.unMSGBar.setText("可卸载软件 <font color='#009900'>" + str(data.installedCount) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>") def slot_count_upgradable_over(self): print "uover..." self.ui.upMSGBar.setText("可升级软件 <font color='#009900'>" + str(data.upgradableCount) + "</font> 款,系统盘可用空间 <font color='#009900'>" + vfs.get_available_size() + "</font>") def slot_backend_msg(self, msg): print msg
class MainWindow(QMainWindow): """Main application form class""" def __init__(self, data, classifier, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.set_data(data) self.classifier = classifier self.ui.cacl_button.clicked.connect(self.do_calc) def do_calc(self): row = self.get_row() res = self.classifier.get_labels_weights(row) self.set_result(res) def get_row(self): row = [] for i in xrange(self.data_set.n_features): if self.feature_active_checkboxes[i].checkState() != Qt.Checked: row.append(numpy.nan) elif i in self.data_set.feature_class_names.keys(): row.append(self.feature_inputs[i].currentIndex()) else: row.append(self.feature_inputs[i].value()) return row def set_result(self, values_count): s = sum(values_count.values()) for i in xrange(len(self.data_set.target_names)): val = int(100 * values_count[i]/s) if values_count.has_key(i) else 0 self.target_bars[i].setValue(val) def set_data(self, data_set): self.data_set = data_set self.feature_inputs = [] self.feature_active_checkboxes = [] for i, feature_name in zip(xrange(data_set.n_features), data_set.feature_names): rowLayout = QtGui.QHBoxLayout() featureLabel = QtGui.QLabel() active_checkbox = QtGui.QCheckBox() active_checkbox.setCheckState(Qt.Checked) featureLabel.setText(feature_name) featureLabel.setFixedWidth(150) if i in data_set.feature_class_names.keys(): combo = QtGui.QComboBox() for label in data_set.feature_class_names[i]: combo.addItem(label) input = combo else: input = QtGui.QSpinBox() input.setFixedWidth(150) self.feature_inputs.append(input) a = i def abc(state): self.feature_inputs[i].setEnabled(state == Qt.Checked) active_checkbox.stateChanged.connect( abc ) self.feature_active_checkboxes.append(active_checkbox) rowLayout.addWidget(active_checkbox) rowLayout.addWidget(input) rowLayout.addWidget(featureLabel) featureLabel.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding)) self.ui.features_layout.addLayout(rowLayout) self.target_bars = [] for target_name in data_set.target_names: rowLayout = QtGui.QHBoxLayout(self) target_label = QtGui.QLabel(self) target_label.setText(target_name) target_label.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)) target_label.setFixedWidth(100) bar = QtGui.QProgressBar() self.target_bars.append(bar) rowLayout.addWidget(bar) rowLayout.addWidget(target_label) self.ui.result_layout.addLayout(rowLayout) class TableModel(QAbstractTableModel): def __init__(self, data_set): super(TableModel, self).__init__(None) self.data_set = data_set def rowCount(self, index=QModelIndex()): """ Returns the number of rows the model holds. """ return self.data_set.n_samples def columnCount(self, index=QModelIndex()): return self.data_set.n_features + 1 def data(self, index, role=Qt.DisplayRole): """ Depending on the index and role given, return data. If not returning data, return None (PySide equivalent of QT's "invalid QVariant"). """ if role != Qt.DisplayRole: return None if not index.isValid(): return None #noinspection PyTypeChecker if not 0 <= index.row() < self.data_set.n_samples: return None if index.column() < self.data_set.n_features: # if self.data_set.feature_class_names.has_key(index.column()): # return unicode(self.data_set.feature_class_names[index.column()][int(self.data_set.data[index.row(), index.column()])]) return unicode(self.data_set.data[index.row(), index.column()]) else: return unicode(self.data_set.target_names[int(self.data_set.target[index.row()])]) def headerData(self, section, orientation, role=Qt.DisplayRole): """ Set the headers to be displayed. """ if role != Qt.DisplayRole: return None if orientation == Qt.Horizontal: if section < self.data_set.n_features: return self.data_set.feature_names[section] elif section == self.data_set.n_features: return "DS" return None self.ui.data_view.setModel(TableModel(data_set)) self.ui.data_view.update()
class Main(QtGui.QMainWindow): def __init__(self, parent=None): super(Main, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setFixedSize(648, 635) self.setWindowTitle("ChessQt") self.style = ["background: #333", "background: #fff"] self.ui.actionNowa_gra.triggered.connect(self.newGame) self.next_move = False for i in xrange(8): for j in xrange(8): m_label = MyLabel(i, j, self.style[(i + j) % 2]) labels[(i, j)] = m_label self.ui.gridLayout_2.addWidget(m_label, i, j) m_label.clicked.connect(self.slotClicked) self.newGame() def createPiece(self): chessboard[(6, 0)] = BlackPawn(6, 0, True) chessboard[(6, 1)] = BlackPawn(6, 1, True) chessboard[(6, 2)] = BlackPawn(6, 2, True) chessboard[(6, 3)] = BlackPawn(6, 3, True) chessboard[(6, 4)] = BlackPawn(6, 4, True) chessboard[(6, 5)] = BlackPawn(6, 5, True) chessboard[(6, 6)] = BlackPawn(6, 6, True) # chessboard[(6, 7)] = BlackPawn(6, 7, True) chessboard[(7, 0)] = Rook(7, 0, True) chessboard[(7, 1)] = Knight(7, 1, True) chessboard[(7, 2)] = Bishop(7, 2, True) chessboard[(7, 3)] = King(7, 3, True) self.white_king = chessboard[(7, 3)] chessboard[(7, 4)] = Queen(7, 4, True) chessboard[(7, 5)] = Bishop(7, 5, True) chessboard[(7, 6)] = Knight(7, 6, True) chessboard[(7, 7)] = Rook(7, 7, True) chessboard[(0, 0)] = Rook(0, 0, False) chessboard[(0, 1)] = Knight(0, 1, False) chessboard[(0, 2)] = Bishop(0, 2, False) chessboard[(0, 3)] = King(0, 3, False) self.black_king = chessboard[(0, 3)] chessboard[(0, 4)] = Queen(0, 4, False) chessboard[(0, 5)] = Bishop(0, 5, False) chessboard[(0, 6)] = Knight(0, 6, False) chessboard[(0, 7)] = Rook(0, 7, False) # chessboard[(1, 0)] = WhitePawn(1, 0, False) chessboard[(1, 1)] = WhitePawn(1, 1, False) chessboard[(1, 2)] = WhitePawn(1, 2, False) chessboard[(1, 3)] = WhitePawn(1, 3, False) chessboard[(1, 4)] = WhitePawn(1, 4, False) chessboard[(1, 5)] = WhitePawn(1, 5, False) chessboard[(1, 6)] = WhitePawn(1, 6, False) chessboard[(1, 7)] = WhitePawn(1, 7, False) def refreshPiece(self): for i in xrange(8): for j in xrange(8): if chessboard.has_key((i, j)): piece = chessboard.get((i, j)) if piece.alive: if piece.color: labels.get((i, j)).setImagePiece(piece.src_black) else: labels.get((i, j)).setImagePiece(piece.src_white) else: labels.get((i, j)).setImagePiece("") def deselectAll(self): for i in xrange(8): for j in xrange(8): labels.get((i, j)).setStyleSheet(self.style[(i + j) % 2]) def movePiece(self, x, y): chessboard.get((self.active_x, self.active_y)).move(x, y) chessboard[(x, y)] = chessboard.get((self.active_x, self.active_y)) del chessboard[(self.active_x, self.active_y)] self.deselectAll() self.refreshPiece() self.next_move = not self.next_move if not self.black_king.alive: dialog = QtGui.QDialog() elif not self.white_king.alive: QMessageBox.about(self, "Black wins.", "") def removePiece(self): for i in xrange(8): for j in xrange(8): if chessboard.has_key((i, j)): del chessboard[(i, j)] def newGame(self): self.removePiece() self.createPiece() self.refreshPiece() def slotNewGame(self): self.newGame() def slotClicked(self, x, y): if chessboard.has_key((x, y)) and labels.get((x, y)).styleSheet() == "background: #00f": chessboard.get((x, y)).makeNotAlive() self.movePiece(x, y) elif chessboard.has_key((x, y)): if chessboard.get((x, y)).color == self.next_move: for i in xrange(8): for j in xrange(8): labels[(i, j)].setStyleSheet(self.style[(i+j) % 2]) if chessboard.get((x, y)).moveValidator(i, j) and not chessboard.get((x, y)).isSelfHere(i, j): labels.get((i, j)).setStyleSheet("background: #00f") else: labels.get((x, y)).setStyleSheet(self.style[(i+j) % 2]) labels.get((x, y)).setStyleSheet("background: #f00") self.active_x = x self.active_y = y elif labels.get((x, y)).styleSheet() == "background: #00f": self.movePiece(x, y)
def ui_init(self): self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle("Ubuntu Kylin Software-Center") self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground, True) self.ui.headerWidget.installEventFilter(self) self.ui.categoryView.itemClicked.connect(self.slot_change_category) self.ui.allsListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.upListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.unListWidget.verticalScrollBar().valueChanged.connect(self.slot_softwidget_scroll_end) self.ui.btnHomepage.pressed.connect(self.slot_goto_homepage) self.ui.btnUp.pressed.connect(self.slot_goto_uppage) self.ui.btnUn.pressed.connect(self.slot_goto_unpage) self.ui.btnTask.pressed.connect(self.slot_goto_taskpage) self.ui.btnClose.clicked.connect(self.slot_close) self.ui.btnMin.clicked.connect(self.slot_min) self.connect(data.backend, SIGNAL("backendmsg"), self.slot_backend_msg) # style by code self.ui.headerWidget.setAutoFillBackground(True) palette = QPalette() img = QPixmap("res/header.png") palette.setBrush(QPalette.Window, QBrush(img)) self.ui.headerWidget.setPalette(palette) self.ui.bottomWidget.setAutoFillBackground(True) palette = QPalette() img = QPixmap("res/foot.png") palette.setBrush(QPalette.Window, QBrush(img)) self.ui.bottomWidget.setPalette(palette) self.ui.categoryView.setFocusPolicy(Qt.NoFocus) self.ui.btnDay.setFocusPolicy(Qt.NoFocus) self.ui.btnWeek.setFocusPolicy(Qt.NoFocus) self.ui.btnMonth.setFocusPolicy(Qt.NoFocus) self.ui.btnDownTimes.setFocusPolicy(Qt.NoFocus) self.ui.btnGrade.setFocusPolicy(Qt.NoFocus) self.ui.btnClose.setFocusPolicy(Qt.NoFocus) self.ui.btnMin.setFocusPolicy(Qt.NoFocus) self.ui.btnSkin.setFocusPolicy(Qt.NoFocus) self.ui.btnConf.setFocusPolicy(Qt.NoFocus) self.ui.btnBack.setFocusPolicy(Qt.NoFocus) self.ui.btnNext.setFocusPolicy(Qt.NoFocus) self.ui.btnHomepage.setFocusPolicy(Qt.NoFocus) self.ui.btnUp.setFocusPolicy(Qt.NoFocus) self.ui.btnUn.setFocusPolicy(Qt.NoFocus) self.ui.btnTask.setFocusPolicy(Qt.NoFocus) self.ui.allsListWidget.setFocusPolicy(Qt.NoFocus) self.ui.upListWidget.setFocusPolicy(Qt.NoFocus) self.ui.unListWidget.setFocusPolicy(Qt.NoFocus) self.ui.taskListWidget.setFocusPolicy(Qt.NoFocus) self.ui.allsWidget.hide() self.ui.upWidget.hide() self.ui.unWidget.hide() self.ui.taskWidget.hide() self.show() # style by qss self.ui.btnBack.setStyleSheet("QPushButton{background-image:url('res/nav-back-1.png');border:0px;}QPushButton:hover{background:url('res/nav-back-2.png');}QPushButton:pressed{background:url('res/nav-back-3.png');}") self.ui.btnNext.setStyleSheet("QPushButton{background-image:url('res/nav-next-1.png');border:0px;}QPushButton:hover{background:url('res/nav-next-2.png');}QPushButton:pressed{background:url('res/nav-next-3.png');}") self.ui.btnHomepage.setStyleSheet("QPushButton{background-image:url('res/nav-homepage-1.png');border:0px;}QPushButton:hover{background:url('res/nav-homepage-2.png');}QPushButton:pressed{background:url('res/nav-homepage-3.png');}") self.ui.btnUp.setStyleSheet("QPushButton{background-image:url('res/nav-up-1.png');border:0px;}QPushButton:hover{background:url('res/nav-up-2.png');}QPushButton:pressed{background:url('res/nav-up-3.png');}") self.ui.btnUn.setStyleSheet("QPushButton{background-image:url('res/nav-un-1.png');border:0px;}QPushButton:hover{background:url('res/nav-un-2.png');}QPushButton:pressed{background:url('res/nav-un-3.png');}") self.ui.btnTask.setStyleSheet("QPushButton{background-image:url('res/nav-task-1.png');border:0px;}QPushButton:hover{background:url('res/nav-task-2.png');}QPushButton:pressed{background:url('res/nav-task-3.png');}") self.ui.logoImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}") self.ui.searchicon.setStyleSheet("QLabel{background-image:url('res/search.png')}") self.ui.leSearch.setStyleSheet("QLineEdit{border:1px solid #C3E0F4;border-radius:2px;padding-left:15px;color:#497FAB;font-size:13px;}") self.ui.userWidget.setStyleSheet("QWidget{background-color:#DDE4EA}") self.ui.userLabel.setStyleSheet("QLabel{background-image:url('res/item3')}") self.ui.item1Widget.setStyleSheet("QWidget{background-image:url('res/item1.png')}") self.ui.item2Widget.setStyleSheet("QWidget{background-image:url('res/item2.png')}") self.ui.btnClose.setStyleSheet("QPushButton{background-image:url('res/close-1.png');border:0px;}QPushButton:hover{background:url('res/close-2.png');}QPushButton:pressed{background:url('res/close-3.png');}") self.ui.btnMin.setStyleSheet("QPushButton{background-image:url('res/min-1.png');border:0px;}QPushButton:hover{background:url('res/min-2.png');}QPushButton:pressed{background:url('res/min-3.png');}") self.ui.btnSkin.setStyleSheet("QPushButton{background-image:url('res/skin-1.png');border:0px;}QPushButton:hover{background:url('res/skin-2.png');}QPushButton:pressed{background:url('res/skin-3.png');}") self.ui.btnConf.setStyleSheet("QPushButton{background-image:url('res/conf-1.png');border:0px;}QPushButton:hover{background:url('res/conf-2.png');}QPushButton:pressed{background:url('res/conf-3.png');}") self.ui.categoryView.setStyleSheet("QListWidget{border:0px;background-image:url('res/categorybg.png');}QListWidget::item{height:35px;padding-left:20px;margin-top:0px;border:0px;}QListWidget::item:hover{background:#CAD4E2;}QListWidget::item:selected{background-color:#6BB8DD;color:black;}") self.ui.categorytext.setStyleSheet("QLabel{background-image:url('res/categorybg.png');color:#7E8B97;font-weight:bold;padding-left:5px;}") self.ui.hline1.setStyleSheet("QLabel{background-image:url('res/hline1.png')}") self.ui.recommendWidget.setStyleSheet("QWidget{background-color:white}") self.ui.vline1.setStyleSheet("QLabel{background-color:#BBD1E4;}") self.ui.rankWidget.setStyleSheet("QWidget{background-color:white}") self.ui.rankLogo.setStyleSheet("QLabel{background-image:url('res/rankLogo.png')}") self.ui.rankText.setStyleSheet("QLabel{color:#7E8B97;font-size:13px;font-weight:bold;}") self.ui.btnDay.setStyleSheet("QPushButton{background-image:url('res/day1.png');border:0px;}") self.ui.btnWeek.setStyleSheet("QPushButton{background-image:url('res/week1.png');border:0px;}") self.ui.btnMonth.setStyleSheet("QPushButton{background-image:url('res/month1.png');border:0px;}") self.ui.btnDownTimes.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}") self.ui.btnGrade.setStyleSheet("QPushButton{font-size:14px;color:#2B8AC2;background-color:#C3E0F4;border:0px;}") self.ui.rankView.setStyleSheet("QListWidget{border:0px;}") self.ui.bottomImg.setStyleSheet("QLabel{background-image:url('res/logo.png')}") self.ui.bottomText1.setStyleSheet("QLabel{color:white;font-size:14px;}") self.ui.bottomText2.setStyleSheet("QLabel{color:white;font-size:14px;}") self.ui.allsMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.upMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.unMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.taskMSGBar.setStyleSheet("QLabel{background-color:white;font-size:14px;padding-top:25px;padding-left:10px;}") self.ui.allsHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.upHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.unHeader.setStyleSheet("QLabel{background-image:url('res/listwidgetheader.png')}") self.ui.taskHeader.setStyleSheet("QLabel{background-image:url('res/taskwidgetheader.png')}") self.ui.allsListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.upListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.unListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:66px;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}") self.ui.taskListWidget.setStyleSheet("QListWidget{border:0px;}QListWidget::item{height:45;margin-top:-1px;border:1px solid #d5e3ec;}QListWidget::item:hover{background-color:#E4F1F8;}")
class MyApplication(QtGui.QMainWindow): def __assign_displays(self): """assigns display name """ self.displays = CDisplay.detect_display_devices() self.no_of_displays = len(self.displays) self.no_of_connected_dev = self.no_of_displays if self.no_of_displays is 1: self.display1 = self.displays[0] elif self.no_of_displays is 2: self.display1 = self.displays[0] self.display2 = self.displays[1] def __init__(self, parent=None): """Initializes""" QtGui.QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.display1 = None self.display2 = None self.temperature = 'Default' self.no_of_connected_dev = 0 self.__assign_displays() self.setup_default_directory() self.generate_dynamic_items() self.default_config = '/home/{}/.config/' \ 'brightness_controller/settings' \ .format(getpass.getuser()) self.values = [] self.array_value = 0.01 for i in xrange(0, 100): self.values.append(self.array_value) self.array_value += 0.01 self.connect_handlers() self.setup_widgets() if path.exists(self.default_config): self.load_settings(self.default_config) self.setup_tray(parent) def setup_default_directory(self): """ Create default settings directory if it doesnt exist """ directory = '/home/{}/.config/' \ 'brightness_controller/' \ .format(getpass.getuser()) if not path.exists(directory): try: makedirs(directory) except error as e: self._show_error(str(e)) def closeEvent(self, event): """ Override CloseEvent for system tray """ if self.isVisible() is True: self.hide() event.ignore() else: reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: event.accept() else: # fixes an odd event bug, the app never shows but prevents closing self.show() self.hide() event.ignore() def setup_tray(self, parent): """ Setup systemtray """ self.tray_menu = QtGui.QMenu(parent) self.tray_menu.addAction(QtGui.QAction("Show ...", self, statusTip="Show", triggered=self.show)) self.tray_menu.addAction(QtGui.QAction("Quit ...", self, statusTip="Quit", triggered=self.close)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("/usr/share/icons/hicolor/scalable/apps/brightness-controller.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.tray_icon = QtGui.QSystemTrayIcon(icon, self) if self.tray_icon.isSystemTrayAvailable(): self.tray_icon.connect( QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self._icon_activated) self.tray_icon.setContextMenu(self.tray_menu) self.tray_icon.show() def _icon_activated(self, reason): if reason in (QtGui.QSystemTrayIcon.Trigger, QtGui.QSystemTrayIcon.DoubleClick): self.show() def setup_widgets(self): """connects the form widgets with functions""" self.license_widget = LicenseForm() self.license_widget.set_main_window(self) self.license_widget.hide() self.about_widget = AboutForm() self.about_widget.set_main_window(self) self.about_widget.hide() self.help_widget = HelpForm() self.help_widget.set_main_window(self) self.help_widget.hide() def generate_dynamic_items(self): ''' manages widgets that may contain dynamic items. ''' self.generate_brightness_sources() def generate_brightness_sources(self): ''' generates assigns display sources to combo boxes ''' if self.no_of_connected_dev < 2: self.ui.secondary_combo.addItem("Disabled") self.ui.secondary_combo.setEnabled(False) self.ui.primary_combobox.addItem("Disabled") self.ui.primary_combobox.setEnabled(False) return for display in self.displays: self.ui.secondary_combo.addItem(display) self.ui.primary_combobox.addItem(display) def connect_handlers(self): """Connects the handlers of GUI widgets""" self.ui.primary_brightness.valueChanged[int].\ connect(self.change_value_pbr) self.ui.primary_red.valueChanged[int].\ connect(self.change_value_pr) self.ui.primary_blue.valueChanged[int].\ connect(self.change_value_pb) self.ui.primary_green.valueChanged[int].\ connect(self.change_value_pg) self.enable_secondary_widgets(False) if self.no_of_connected_dev >= 2: self.enable_secondary_widgets(True) self.connect_secondary_widgets() if path.exists(self.default_config): self.ui.actionClearDefault.setVisible(True) self.ui.actionClearDefault.triggered.connect(self.delete_default_settings) self.ui.actionDefault.triggered.connect(lambda: self.save_settings(True)) self.ui.comboBox.activated[str].connect(self.combo_activated) self.ui.primary_combobox.activated[ str].connect(self.primary_source_combo_activated) self.ui.secondary_combo.activated[ str].connect(self.secondary_source_combo_activated) self.ui.actionAbout.triggered.connect(self.show_about) self.ui.actionExit.triggered.connect(self.close) self.ui.actionHelp.triggered.connect(self.show_help) self.ui.actionLicense.triggered.connect(self.show_license) self.ui.actionSave.triggered.connect(self.save_settings) self.ui.actionLoad.triggered.connect(self.load_settings) def enable_secondary_widgets(self, boolean): """ boolean - assigns boolean value to setEnabled(boolean) """ self.ui.secondary_brightness.setEnabled(boolean) self.ui.secondary_blue.setEnabled(boolean) self.ui.secondary_red.setEnabled(boolean) self.ui.secondary_green.setEnabled(boolean) def connect_secondary_widgets(self): """ connects the secondary widgets with functions """ self.ui.secondary_brightness.valueChanged[int].\ connect(self.change_value_sbr) self.ui.secondary_red.valueChanged[int].\ connect(self.change_value_sr) self.ui.secondary_blue.valueChanged[int].\ connect(self.change_value_sb) self.ui.secondary_green.valueChanged[int].\ connect(self.change_value_sg) def change_value_pbr(self, value): """Changes Primary Display Brightness""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display1, self.values[value], self.values[self.ui.primary_red.value()], self.values[self.ui.primary_green.value()], self.values[self.ui.primary_blue.value()]) Executor.execute_command(cmd_value) def change_value_pr(self, value): """Changes Primary Display Red ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display1, self.values[self.ui.primary_brightness.value()], self.values[value], self.values[self.ui.primary_green.value()], self.values[self.ui.primary_blue.value()]) Executor.execute_command(cmd_value) def change_value_pg(self, value): """Changes Primary Display Green ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display1, self.values[self.ui.primary_brightness.value()], self.values[self.ui.primary_red.value()], self.values[value], self.values[self.ui.primary_blue.value()]) Executor.execute_command(cmd_value) def change_value_pb(self, value): """Changes Primary Display Blue ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display1, self.values[self.ui.primary_brightness.value()], self.values[self.ui.primary_red.value()], self.values[self.ui.primary_green.value()], self.values[value]) Executor.execute_command(cmd_value) def change_value_sbr(self, value): """ Changes Secondary Display Brightness """ cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display2, self.values[value], self.values[self.ui.secondary_red.value()], self.values[self.ui.secondary_green.value()], self.values[self.ui.secondary_blue.value()]) Executor.execute_command(cmd_value) def change_value_sr(self, value): """Changes Secondary Display Red ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display2, self.values[self.ui.secondary_brightness.value()], self.values[value], self.values[self.ui.secondary_green.value()], self.values[self.ui.secondary_blue.value()]) Executor.execute_command(cmd_value) def change_value_sg(self, value): """Changes Secondary Display Green ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display2, self.values[self.ui.secondary_brightness.value()], self.values[self.ui.secondary_red.value()], self.values[value], self.values[self.ui.secondary_blue.value()]) Executor.execute_command(cmd_value) def change_value_sb(self, value): """Changes Primary Display Blue ratio""" cmd_value = "xrandr\ --output %s \ --brightness %s\ --gamma %s:%s:%s" % \ (self.display2, self.values[self.ui.secondary_brightness.value()], self.values[self.ui.secondary_red.value()], self.values[self.ui.secondary_green.value()], self.values[value]) Executor.execute_command(cmd_value) def changed_state(self, state): if state == QtCore.Qt.Checked: temp = self.display1 self.display1 = self.display2 self.display2 = temp else: temp = self.display1 self.display1 = self.display2 self.display2 = temp def secondary_source_combo_activated(self, text): ''' assigns combo value to display ''' self.display2 = text def primary_source_combo_activated(self, text): '''assigns combo value to display''' self.display1 = text def combo_activated(self, text): """ Designates values to display and to sliders """ self.temperature = text if text == 'Default': rgb = [255, 255, 255] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '1900K Candle': rgb = [255, 147, 41] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '2600K 40W Tungsten': rgb = [255, 197, 143] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '2850K 100W Tungsten': rgb = [255, 214, 170] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '3200K Halogen': rgb = [255, 241, 224] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '5200K Carbon Arc': rgb = [255, 250, 244] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '5400K High Noon': rgb = [255, 255, 251] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '6000K Direct Sun': rgb = [255, 255, 255] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '7000K Overcast Sky': rgb = [201, 226, 255] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) elif text == '20000K Clear Blue Sky': rgb = [64, 156, 255] self.change_primary_sliders(rgb) if self.no_of_connected_dev == 2: self.change_secondary_sliders(rgb) def change_primary_sliders(self, rgb): """ rgb - based on the rgb array, assign values to primary display sliders and in turn changes primary display color """ slider_r = int((rgb[0] * 100) / 255) slider_g = int((rgb[1] * 100) / 255) slider_b = int((rgb[2] * 100) / 255) self.ui.primary_red.setValue(slider_r) self.ui.primary_green.setValue(slider_g) self.ui.primary_blue.setValue(slider_b) def change_secondary_sliders(self, rgb): """ rgb - based on the rgb array, assign values to secondary display sliders and in turn changes secondary display color rgb is given in array from a range of 0 to 255 """ slider_r = int((rgb[0] * 100) / 255) slider_g = int((rgb[1] * 100) / 255) slider_b = int((rgb[2] * 100) / 255) self.ui.secondary_red.setValue(slider_r) self.ui.secondary_green.setValue(slider_g) self.ui.secondary_blue.setValue(slider_b) def change_secondary_sliders_in_rgb_0_99(self, br_rgb): """ change slider values in rgb from a range of 0 to 99 value for secondary monitor slider """ self.ui.secondary_brightness.setValue(br_rgb[0]) self.ui.secondary_red.setValue(br_rgb[1]) self.ui.secondary_green.setValue(br_rgb[2]) self.ui.secondary_blue.setValue(br_rgb[3]) def primary_sliders_in_rgb_0_99(self, br_rgb): """ change slider values in rgb from a range of 0 to 99 value for primary monitor sliders """ self.ui.primary_brightness.setValue(br_rgb[0]) self.ui.primary_red.setValue(br_rgb[1]) self.ui.primary_green.setValue(br_rgb[2]) self.ui.primary_blue.setValue(br_rgb[3]) def secondary_sliders_in_rgb_0_99(self, br_rgb): """ change slider values in rgb from a range of 0 to 99 value for primary monitor sliders """ self.ui.secondary_brightness.setValue(br_rgb[0]) self.ui.secondary_red.setValue(br_rgb[1]) self.ui.secondary_green.setValue(br_rgb[2]) self.ui.secondary_blue.setValue(br_rgb[3]) def show_about(self): """ Shows the About widget""" self.about_widget.show() def show_license(self): """ Shows the License widget""" self.license_widget.show() def show_help(self): """ Shows the Help Widget""" self.help_widget.show() def save_settings(self, default=False): """ save current primary and secondary display settings""" file_path = self.default_config if default else QtGui.QFileDialog.getSaveFileName()[0] # just a number. path.exists won't work in case it is a new file. if len(file_path) > 5: if default: self.ui.actionClearDefault.setVisible(True) if self.no_of_connected_dev == 1: WriteConfig.write_primary_display( self.return_current_primary_settings(), file_path ) elif self.no_of_connected_dev >= 2: WriteConfig.write_both_display( self.return_current_primary_settings(), self.return_current_secondary_settings(), file_path ) def _show_error(self, message): """ Shows an Error Message""" QtGui.QMessageBox.critical(self, 'Error', message) def delete_default_settings(self): """ delete default settings """ if path.exists(self.default_config): try: remove(self.default_config) self.ui.actionClearDefault.setVisible(False) except OSError as e: self._show_error(str(e)) else: return False def _load_temperature(self, text='Default'): """ Load current temperature settings """ self.temperature = text primary_temperature_index = self.ui.comboBox.findText( text, QtCore.Qt.MatchFixedString) if primary_temperature_index >= 0: self.ui.comboBox.setCurrentIndex(primary_temperature_index) def load_settings(self, location=None): """ Load current primary and secondary display settings """ file_path = location or QtGui.QFileDialog.getOpenFileName()[0] if path.exists(file_path): loaded_settings = ReadConfig.read_configuration(file_path) if len(loaded_settings) == 5: self._load_temperature(loaded_settings[4]) self.primary_sliders_in_rgb_0_99(loaded_settings) elif len(loaded_settings) == 11: # checks just in case saved settings are for two displays, # but loads when only one display is connected if self.no_of_connected_dev == 1: self.primary_sliders_in_rgb_0_99( (loaded_settings[0], loaded_settings[1], loaded_settings[2], loaded_settings[3])) return # sets reverse control primary_source = loaded_settings[4] secondary_source = loaded_settings[10] self._load_temperature(loaded_settings[5]) primary_combo_index = self.ui.primary_combobox.findText( primary_source, QtCore.Qt.MatchFixedString) second_combo_index = self.ui.secondary_combo.findText( secondary_source, QtCore.Qt.MatchFixedString) if primary_combo_index >= 0: self.ui.primary_combobox.setCurrentIndex(primary_combo_index) self.primary_source_combo_activated(primary_source) if second_combo_index >= 0: self.ui.secondary_combo.setCurrentIndex(second_combo_index) self.secondary_source_combo_activated(secondary_source) self.primary_sliders_in_rgb_0_99( (loaded_settings[0], loaded_settings[1], loaded_settings[2], loaded_settings[3])) # (99, 99, 99, 99, 'LVDS-1', 99, 38, 99, 99, 'VGA-1') self.secondary_sliders_in_rgb_0_99( (loaded_settings[6], loaded_settings[7], loaded_settings[8], loaded_settings[9])) def return_current_primary_settings(self): """ return p_br_rgb(primary_brightness, primary_red, primary_green, primary_blue) """ # p_br_rgb = [] p_br_rgb = [ self.ui.primary_brightness.value(), self.ui.primary_red.value(), self.ui.primary_green.value(), self.ui.primary_blue.value(), self.display1, self.temperature ] return p_br_rgb def return_current_secondary_settings(self): """ return s_br_rgb(secondary_brightness, secondary_red, secondary_green, secondary_blue) """ s_br_rgb = [ self.ui.secondary_brightness.value(), self.ui.secondary_red.value(), self.ui.secondary_green.value(), self.ui.secondary_blue.value(), self.display2 ] # s_br_rgb = [] # s_br_rgb.append(self.ui.secondary_brightness.value()) # s_br_rgb.append(self.ui.secondary_red.value()) # s_br_rgb.append(self.ui.secondary_green.value()) # s_br_rgb.append(self.ui.secondary_blue.value()) return s_br_rgb
class MainWindow(QMainWindow): connected = pyqtSignal(bool) def __init__(self, app): QMainWindow.__init__(self) self.app = app self.ui = Ui_MainWindow() self.ui.setupUi(self) self._exit = False self.ui.action_Exit.triggered.connect(self.exit) self.ui.actionAbout_Qt.triggered.connect(app.aboutQt) self.setWindowIcon(QIcon(':/icons/logo32')) self.listener = None self.tray = None self.pusher = None self._connected = False self.settings_dlg = SettingsDlg(self) self.settings_dlg.saved.connect(self.reconnect) self.tray = PushbulletTray(self) self.connect_actions() self.connect_pushbullet() self.tray.show() def connect_actions(self): self.ui.action_Settings.triggered.connect(self.settings_dlg.show) self.ui.browseFileBtn.clicked.connect(self.choice_file) self.ui.action_Refresh.triggered.connect(self.refresh) # List Items self.ui.addItemBtn.clicked.connect(self.add_item_list) self.ui.removeItemBtn.clicked.connect(self.remove_item_list) self.ui.clearItemsBtn.clicked.connect(self.clear_item_list) self.ui.itemsList.itemDoubleClicked.connect(self.edit_item_list) @pyqtSlot() def add_item_list(self): item = QListWidgetItem("item", self.ui.itemsList) item.setFlags(item.flags() | Qt.ItemIsEditable) self.ui.itemsList.addItem(item) @pyqtSlot() def remove_item_list(self): if self.ui.itemsList.currentRow() >= 0: self.ui.itemsList.takeItem(self.ui.itemsList.currentRow()) @pyqtSlot() def clear_item_list(self): self.ui.itemsList.clear() @pyqtSlot(QListWidgetItem) def edit_item_list(self, item): self.ui.itemsList.editItem(item) @pyqtSlot() def choice_file(self): file_to_send = QFileDialog.getOpenFileName(self, "choose file to send") if file_to_send and not file_to_send.isEmpty(): self.ui.filePathEdt.setText(file_to_send) @pyqtSlot() def refresh(self): self.refresh_devices() @pyqtSlot() def refresh_devices(self): self.ui.devicesList.clear() for device in self.pusher.devices: device_item = QListWidgetItem(device.nickname) device_item.setData(Qt.UserRole, device) self.ui.devicesList.addItem(device_item) def connect_pushbullet(self): if config.value('key') is not None and not config.value('key').toString().isEmpty(): proxy_host = str(config.value('proxy.host').toString()) proxy_port, int_conv_ok = config.value('proxy.port').toInt() if proxy_host.strip() == '': proxy_host = proxy_port = None self.pusher = PushBullet(str(config.value('key').toString())) self.listener = QPushBulletListener(self, self.pusher, proxy_host, proxy_port) self.listener.start() self.connect_systray() self.connect_pushes_actions() self.refresh_devices() self.connected.emit(True) self._connected = True else: self.connected.emit(False) def disconnect_pushbullet(self): self.connected.emit(False) if False and self.listener is not None: print "systray" self.disconnect_systray() print "listener quit" self.listener.quit() print "listener terminate" self.listener.terminate() print "disconnect_pushes" self.disconnect_pushes_actions() self.listener = None @pyqtSlot() def push_note(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_note(str(self.ui.noteTitleEdt.text()), str(self.ui.noteTextEdt.toPlainText())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_link(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_link(str(self.ui.linkTitleEdt.text()), str(self.ui.linkUrlEdt.text())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_list(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() widget_items = [self.ui.itemsList.item(n) for n in range(0, self.ui.itemsList.count())] items = map(lambda x: str(x.text()), widget_items) device.push_list(str(self.ui.listTitleEdt.text()), items) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_file(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() fname = str(self.ui.filePathEdt.text()) with open(fname, "rb") as f_to_send: success, file_data = self.pusher.upload_file(f_to_send, os.path.basename(fname)) if success: device.push_file(**file_data) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") @pyqtSlot() def push_address(self): if self.pusher and len(self.ui.devicesList.selectedItems()) == 1: device = self.ui.devicesList.selectedItems()[0].data(Qt.UserRole).toPyObject() device.push_address(str(self.ui.addressTitleEdt.text()), str(self.ui.addressTxt.toPlainText())) else: QMessageBox.warning(self, "Cannot push", "There is no target device selected") def connect_pushes_actions(self): self.ui.sendNoteBtn.clicked.connect(self.push_note) self.ui.sendLinkBtn.clicked.connect(self.push_link) self.ui.sendFileBtn.clicked.connect(self.push_file) self.ui.sendListBtn.clicked.connect(self.push_list) self.ui.sendAddressBtn.clicked.connect(self.push_address) def disconnect_pushes_actions(self): self.ui.sendNoteBtn.clicked.disconnect(self.push_note) self.ui.sendLinkBtn.clicked.disconnect(self.push_link) self.ui.sendFileBtn.clicked.disconnect(self.push_file) self.ui.sendListBtn.clicked.disconnect(self.push_list) self.ui.sendAddressBtn.clicked.disconnect(self.push_address) def connect_systray(self, ): if self.tray is not None: self.connected.connect(self.tray.connected) self.listener.on_link.connect(self.tray.on_link) self.listener.on_note.connect(self.tray.on_note) self.connected.emit(self._connected) def disconnect_systray(self): if self.tray is not None: self.listener.on_link.disconnect(self.tray.on_link) self.listener.on_note.disconnect(self.tray.on_note) @pyqtSlot() def reconnect(self): if self.listener is not None: self.disconnect_pushbullet() self.connect_pushbullet() @pyqtSlot() def exit(self): self._exit = True self.close() def closeEvent(self, event): if not self._exit: self.hide() event.ignore() else: QMainWindow.closeEvent(self, event)
class MainWindow(QMainWindow): scenarioRestore = pyqtSignal(QModelIndex) scriptUpdate = pyqtSignal() def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.targetActions = [ self.ui.actionMarkdown, self.ui.actionKAG3, self.ui.actionNScripter, ] # constants self.HESTIA_ARCHIVE_FILTER = self.tr("Hestia Archive(*.hax)") width = self.ui.splitterScenario.width() w = width // 3 m = width % 3 self.ui.splitterScenario.setSizes([w, w*2+m]) self.ui.splitterScript.setSizes([w, w*2+m]) self.highlighter = ScenarioHighlighter(self.ui.textEditScenario.document()) self.scenarioRestore.connect(self.scenarioRestored) self.errorMessageDialog = ErrorMessageDialog(self) self.previewHasReady = False self.glWindow = GLWindow(self) self.glWindow.setViewSize(1280, 720) self.glWindow.ready.connect(self.previewWindow_ready) self.glWindow.next.connect(self.previewWindow_toNext) self.glWindow.prev.connect(self.previewWindow_toPrev) self.doubleBufferObject = None self.initialize() QMetaObject.invokeMethod(self.glWindow, "show") def initialize(self): self.project = ProjectFile.create() self.projectModel = ProjectTreeModel(self) self.projectModel.projectUpdated.connect(self.projectModel_projectUpdated) # file selection view self.ui.treeViewScenario.setModel(self.projectModel) self.ui.treeViewStructure.setModel(self.projectModel) self.ui.treeViewScript.setModel(self.projectModel) self.scenarioSelection = self.ui.treeViewScenario.selectionModel() self.structureSelection = self.ui.treeViewStructure.selectionModel() self.scriptSelection = self.ui.treeViewScript.selectionModel() self.scenarioSelection.currentRowChanged.connect(self.scenarioSelection_currentRowChanged, Qt.QueuedConnection) self.structureSelection.currentRowChanged.connect(self.structureSelection_currentRowChanged) self.scriptSelection.currentRowChanged.connect(self.scriptSelection_currentRowChanged) # scenario structure view self.structureModel = StructureListModel(self) self.ui.listViewStructure.setModel(self.structureModel) self.lineSelection = self.ui.listViewStructure.selectionModel() self.lineSelection.currentRowChanged.connect(self.lineSelection_currentRowChanged) self.setProject(ProjectFile.create()) self.initializeScenario() def initializeScenario(self): self.setCurrentScenario(Scenario.create()) self.ui.textEditScenario.clear() self.scenarioSelection.setCurrentIndex(QModelIndex(), QItemSelectionModel.Clear) def currentIsChanged(self): text = qt.toUnicode(self.ui.textEditScenario.toPlainText()) return not self.currentScenario.isSame(text) def open(self, filepath): """ :type filepath: str """ self.setProject(ProjectFile.open(filepath)) def save(self, filepath): """ :type filepath: str """ assert(bool(filepath)) filepath = self.hestiaArchiveName(filepath) self.project.setFilePath(filepath) self.project.save() self.setWindowModified(False) def setProject(self, project): self.project = project self.project.changed.connect(self.projectChanged) self.project.changed.connect(self.projectModel.projectUpdate) self.projectModel.setProject(self.project) self.projectModel.projectUpdate() def setCurrentScenario(self, scenario): self.currentScenario = scenario filepath = self.currentScenario.filePath() if not filepath: self.setWindowTitle(self.tr("Hestia [*]")) def getOpenFileName(self, caption, path, filter): """ :rtype: str """ return qt.toUnicode(QFileDialog.getOpenFileName(self, caption, path, filter)) def getSaveFileName(self, caption, path, filter): """ :rtype: str """ return qt.toUnicode(QFileDialog.getSaveFileName(self, caption, path, filter)) def hestiaArchiveName(self, filepath): """ :type filepath: str :rtype: str """ root, ext = os.path.splitext(filepath) if ext != HESTIA_EXT: return root + HESTIA_EXT return filepath def closeEvent(self, event): if self.project.isChanged(): ret = QMessageBox.warning(self, self.tr("Project changed"), self.tr("Do you want to continue?"), QMessageBox.Cancel | QMessageBox.Discard) if ret == QMessageBox.Cancel: event.ignore() return @pyqtSlot(object) def projectChanged(self, container): self.setWindowModified(True) if container: filepath = container.filePath() self.setWindowTitle(self.tr("%1 - Hestia [*]").arg(filepath)) @pyqtSlot() def projectModel_projectUpdated(self): self.ui.treeViewScenario.setRootIndex(self.projectModel.index(0, 0)) self.ui.treeViewStructure.setRootIndex(self.projectModel.index(0, 0)) self.ui.treeViewScript.setRootIndex(self.projectModel.index(0, 0)) self.ui.treeViewScenario.expandAll() self.ui.treeViewStructure.expandAll() self.ui.treeViewScript.expandAll() @pyqtSlot() def previewWindow_ready(self): # set default font if __debug__: path = os.path.join(os.path.dirname(__file__), DEFAULT_FONT) else: appDir = six.text_type(QCoreApplication.applicationDirPath()) path = os.path.join(appDir, DEFAULT_FONT) if not os.path.exists(path): QMessageBox.critical(self, self.tr("Font not found"), self.tr("Font \"%1\" cannot open.").arg(path) ) sys.exit(1) font = ftgl.FTPixmapFont(path.encode(DEFAULT_ENCODING)) if not font.FaceSize(30): print("FaceSize error.", file=sys.stderr) self.glWindow.context().fontRegistry.installFont(None, font) # init double buffer self.doubleBufferObject = DoubleBufferObject() self.glWindow.setDoubleBufferObject(self.doubleBufferObject) # set to ready self.previewHasReady = True @pyqtSlot() def previewWindow_toNext(self): if not self.previewHasReady: return index = self.lineSelection.currentIndex() if not index.isValid(): return next = index.sibling(index.row()+1, index.column()) if not index.isValid(): return self.lineSelection.setCurrentIndex(next, QItemSelectionModel.SelectCurrent) @pyqtSlot() def previewWindow_toPrev(self): if not self.previewHasReady: return index = self.lineSelection.currentIndex() if not index.isValid(): return next = index.sibling(index.row()-1, index.column()) if not index.isValid(): return self.lineSelection.setCurrentIndex(next, QItemSelectionModel.SelectCurrent) @pyqtSlot() def on_actionNew_triggered(self): self.initialize() @pyqtSlot() def on_actionOpen_triggered(self): filepath = self.getOpenFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER) if not filepath: return self.open(filepath) @pyqtSlot() def on_actionSave_triggered(self): filepath = self.project.filePath() if not filepath: filepath = self.getSaveFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER) if not filepath: return filepath = self.hestiaArchiveName(filepath) self.save(filepath) @pyqtSlot() def on_actionSaveAs_triggered(self): filepath = self.getSaveFileName(self.tr(""), self.tr(""), self.HESTIA_ARCHIVE_FILTER) if not filepath: return self.save(filepath) @pyqtSlot() def on_actionScenarioNew_triggered(self): if self.currentIsChanged(): ret = QMessageBox.warning(self, self.tr("Text changed"), self.tr("Do you want to save it?"), QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) if ret == QMessageBox.Cancel: return elif ret == QMessageBox.Save: content = qt.toUnicode(self.ui.textEditScenario.toPlainText()) self.currentScenario.setText(content) self.initializeScenario() @pyqtSlot() def on_actionScenarioSave_triggered(self): filename = self.currentScenario.filePath() if not filename: dialog = FileNameEditDialog(self) if dialog.exec_() != QDialog.Accepted: return filename = dialog.fileName() root, ext = os.path.splitext(filename) if ext not in [".txt", ".md"]: filename += DEFAULT_EXT # set content content = qt.toUnicode(self.ui.textEditScenario.toPlainText()) self.currentScenario.setText(content) if self.currentScenario.filePath(): # filename is already set return # set filepath & register self.currentScenario.setFilePath(filename) self.project.append(self.currentScenario) @pyqtSlot() def on_actionScenarioSaveAs_triggered(self): dialog = FileNameEditDialog(self) if dialog.exec_() != QDialog.Accepted: return filename = dialog.fileName() root, ext = os.path.splitext(filename) if ext not in [".txt", ".md"]: filename += DEFAULT_EXT # set content content = qt.toUnicode(self.ui.textEditScenario.toPlainText()) scenario = Scenario.create() scenario.setText(content) # set filepath & register scenario.setFilePath(filename) self.project.append(scenario) self.setCurrentScenario(scenario) @pyqtSlot() def on_actionShowPreview_triggered(self): self.glWindow.show() @pyqtSlot(QAction) def on_menuTarget_triggered(self, target): # force checked target.setChecked(True) # Toggle target for action in self.targetActions: if action == target: continue if action.isChecked(): action.setChecked(False) current = self.scriptSelection.currentIndex() self.showScript(current) @pyqtSlot(QModelIndex, QModelIndex) def scenarioSelection_currentRowChanged(self, current, previous): if not current.isValid(): return currentItem = current.internalPointer() previousItem = previous.internalPointer() if not isinstance(currentItem, FileItem): return if currentItem == previousItem: return if currentItem.object.type() != ContainerType.Scenario: return if currentItem.object == self.currentScenario: return if self.currentIsChanged(): ret = QMessageBox.information(self, self.tr("Text Changed"), self.tr("Do you want to save it?"), QMessageBox.Save | QMessageBox.Cancel | QMessageBox.Discard) if ret == QMessageBox.Cancel: self.scenarioRestore.emit(previous) return elif ret == QMessageBox.Save: self.currentScenario.setText(qt.toUnicode(self.ui.textEditScenario.toPlainText())) self.setCurrentScenario(currentItem.object) self.ui.textEditScenario.setScenario(self.currentScenario) filepath = self.currentScenario.filePath() self.setWindowTitle(self.tr("%1 - Hestia [*]").arg(filepath)) @pyqtSlot(QModelIndex, QModelIndex) def structureSelection_currentRowChanged(self, current, previous): if not current.isValid(): return currentItem = current.internalPointer() previousItem = previous.internalPointer() if not isinstance(currentItem, FileItem): return root = self.indexToDOM(current) if root is None: return self.structureModel.setRoot(root) @pyqtSlot(QModelIndex, QModelIndex) def scriptSelection_currentRowChanged(self, current, previous): self.showScript(current) @pyqtSlot(QModelIndex) def showScript(self, index): if not index.isValid(): self.ui.textEditScript.clear() return item = index.internalPointer() if not isinstance(item, FileItem): self.ui.textEditScript.clear() return root = self.indexToDOM(index) if root is None: self.ui.textEditScript.clear() return script = self.makeScript(root) self.ui.textEditScript.setPlainText(script) def indexToDOM(self, index): if not index.isValid(): return None item = index.internalPointer() if not isinstance(item, FileItem): return None if item.object.type() != ContainerType.Scenario: return None text = item.object.text() xhtml = converter.toXHTML(text) return etree.fromstring(xhtml) def makeScript(self, root): xslt = self.currentTargetXSLT() return six.text_type(xslt(root)) def currentTargetXSLT(self): root = qt.toUnicode(QCoreApplication.applicationDirPath()) if __debug__: root = os.path.dirname(__file__) if self.ui.actionMarkdown.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_MARKDOWN))) elif self.ui.actionKAG3.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_KAG3))) elif self.ui.actionNScripter.isChecked(): return etree.XSLT(etree.parse(os.path.join(root, XSLT_NSCRIPTER))) else: raise Exception @pyqtSlot(QModelIndex) def scenarioRestored(self, index): self.ui.treeViewScenario.setCurrentIndex(index) @pyqtSlot(QModelIndex, QModelIndex) def lineSelection_currentRowChanged(self, current, previous): if not self.previewHasReady: return if not current.isValid(): return node = current.internalPointer() # background image if node.ctx.bg_img: texture = self.doubleBufferObject.backBuffer().backgroundTexture() path = node.ctx.bg_img.src data = self.project.loadResource(path, test_exts=[".png"]) if data: obj = Image.fromData(texture, data) self.doubleBufferObject.setBackgroundImage(obj) else: # load failed self.errorMessageDialog.appendMessage( self.tr('Resource "%1" not found.').arg(path) ) self.errorMessageDialog.show() # message window obj = ( LoadIdentity() & Ortho2DContext() & BlendWrapper( Color(0.0, 0.0, 0.0, 0.5) & RelativeQuad(Rect(0.0, 0.0, 1280, 300)) ) ) self.doubleBufferObject.setMessageWindow(obj) # message text = self.currentText(current) obj = ( LoadIdentity() & Ortho2DContext() & Color(1.0, 1.0, 1.0) & RasterPos(100, 200) & TextObject(text) ) self.doubleBufferObject.setMessage(obj) self.doubleBufferObject.flip() def currentText(self, current): item = self.structureModel.data(current) return six.text_type(item)
class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.mainwindow = Ui_MainWindow() self.mainwindow.setupUi(self) self.current_list = session.query(List).filter_by(name=u'Default').one() self.load_data() self.editor = Editor(self) self.editor.hide() logging.basicConfig(level=logging.DEBUG) def load_data(self): tasks = session.query(Task).filter_by(taskList=self.current_list) tv = self.mainwindow.treeView model = QStandardItemModel() model.setHorizontalHeaderLabels(['Task', 'Description', 'Date due']) for task in tasks: items = [] it = QStandardItem(QIcon('ui/priority-{0}.png'.format(task.priority)),task.title) it.setData(task.title, Qt.DisplayRole) it.task = task it.column_name = 'title' it.setCheckable(True) if task.completed: it.setCheckState(Qt.CheckState.Checked) else: it.setCheckState(Qt.CheckState.Unchecked) items.append(it) it = QStandardItem() it.setData(task.description, Qt.DisplayRole) it.task = task it.column_name = 'description' items.append(it) it = QStandardItem() it.setData(str(task.date_due), Qt.DisplayRole) it.task = task it.column_name = 'date_due' items.append(it) model.appendRow(items) tv.setModel(model) tv.sortByColumn(2, Qt.SortOrder.AscendingOrder) tv.setColumnWidth(0, 120) tv.setColumnWidth(1, 300) tv.setColumnWidth(2, 165) tv.setIndentation(0) model.dataChanged.connect(self.item_data_changed) tv.selectionModel().currentChanged.connect(self.task_selection_changed) self.mainwindow.actionDelete_Task.triggered.connect(self.delete_task_action) self.mainwindow.actionEdit_Task.triggered.connect(self.edit_task_action) self.mainwindow.actionNew_Task.triggered.connect(self.new_task_action) self.mainwindow.action_Exit.triggered.connect(self.exit_action) def item_data_changed(self, item): if item.column() == 0: print('Ignoring item_data_changed... column was 0') return item = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex()) if item.checkState(): item.task.completed = True else: item.task.completed = False setattr(item.task, item.column_name, item.data(Qt.DisplayRole)) self.mainwindow.treeView.model().item(item.row(), 0).setIcon(QIcon('ui/priority-{0}.png'.format(item.task.priority))) session.commit() def delete_task_action(self,checked=None): idx = self.mainwindow.treeView.currentIndex() # First, get the 'current' task item = self.mainwindow.treeView.model().itemFromIndex(idx) # if none selected, do nothing if not item: logging.debug('No item selected, returning...') return # Delete the task item.task.delete() session.commit() self.mainwindow.treeView.model().removeRow(idx.row()) def new_task_action(self,checked=None): # Open the task in the editor self.editor.action = 'new_task' self.editor.edit(Task(taskList=self.current_list), self.mainwindow.treeView.model()) def number_of_tasks(self): return session.query(Task).count() def edit_task_action(self,checked=None): # Open the task in the editor self.editor.action = 'edit_task' currentItem = self.mainwindow.treeView.model().itemFromIndex(self.mainwindow.treeView.currentIndex()) self.editor.edit(currentItem.task, self.mainwindow.treeView.model()) def exit_action(self): sys.exit() def task_selection_changed(self, current, previous): self.mainwindow.actionDelete_Task.setEnabled(True if current else False)