def status(self): bottomHBox = Gtk.HBox() self.nextTrackLabel = Gtk.Label("Next: ") bottomHBox.pack_start(self.nextTrackLabel, False, False, 0) self.nextTrackNameLabel = ScrollLabel(1) #Gtk.Label() self.nextTrackNameLabel.set_markup("Track Name - Artist Name") self.nextTrackNameLabel.assign_markup("<b>{0}</b>") self.nextTrackNameLabel.set_max_width_chars(21) self.nextTrackNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.scrollLabels.append(self.nextTrackNameLabel) bottomHBox.pack_start(self.nextTrackNameLabel, True, True, 0) queueImage = Gtk.Image() queueImage.set_from_pixbuf( imageManager.get_image('queue').Scale(16, 16)) bottomHBox.pack_start(queueImage, False, False, 2) self.inQueueLabel = Gtk.Label("In Queue: ") bottomHBox.pack_start(self.inQueueLabel, False, False, 0) self.inQueueCountLabel = Gtk.Label() self.inQueueCountLabel.set_markup("<b>##</b>") self.inQueueCountLabel.set_ellipsize(Pango.EllipsizeMode.END) bottomHBox.pack_start(self.inQueueCountLabel, False, False, 0) return bottomHBox
def __init__(self, **kwargs): super().__init__(**kwargs) self.next_screen = False instr = ScrollLabel(txt_test1, textcolor = '#000000') lbl1 = ScrollLabel('Считайте пульс', textcolor = '#000000') self.lbl_sec = Seconds(15, textcolor = '#000000') self.lbl_sec.bind(done=self.sec_finished) line1 = BoxLayout() vlay = BoxLayout(orientation='horizontal') vlay.add_widget(lbl1) vlay.add_widget(self.lbl_sec) line1.add_widget(instr) line1.add_widget(vlay) line2 = BoxLayout(size_hint=(0.8, None), height='30sp') lbl_result = Label(text='Напишите свой результат в этом поле:', halign='right') self.in_result = TextInput(text='0', multiline=False) self.in_result.set_disabled(True) line2.add_widget(lbl_result) line2.add_widget(self.in_result) self.btn = Button(text='Приступить', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next outer = BoxLayout(orientation='vertical', padding=8, spacing=8) outer.add_widget(line1) outer.add_widget(line2) outer.add_widget(self.btn) self.add_widget(outer)
def __init__(self, **kwargs): super().__init__(**kwargs) self.next_screen = False instr = ScrollLabel(txt_sits, size_hint=(0.3, 1), textcolor='#FFFFFF') lbl1 = ScrollLabel('Сделайте 30 приседаний', textcolor='#FFFFFF') self.lbl_sits = Sits(30, textcolor='#FFFFFF') self.run = Runner(total=30, steptime=1.5, size_hint=(0.4, 1), lcolor=(0.44, 0.44, 0.44, 1)) self.run.bind(finished=self.run_finished) line = ColoredLayout(lcolor=(0, 0.5, 0.01, 1)) vlay = BoxLayout(orientation='vertical', size_hint=(0.3, 1)) vlay.add_widget(lbl1) vlay.add_widget(self.lbl_sits) line.add_widget(instr) line.add_widget(vlay) line.add_widget(self.run) self.btn = Button(text='Начать', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next outer = BoxLayout(orientation='vertical', padding=8, spacing=8) outer.add_widget(line) outer.add_widget(self.btn) self.add_widget(outer)
def __init__(self, **kwargs): super().__init__(**kwargs) self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8) self.instr = ScrollLabel('', textcolor = '#000000') self.outer.add_widget(self.instr) self.add_widget(self.outer) self.on_enter = self.before
class Result(Screen): def __init__(self, **kwargs): super().__init__(**kwargs) self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8) self.instr = ScrollLabel('', textcolor = '#000000') self.outer.add_widget(self.instr) self.add_widget(self.outer) self.on_enter = self.before def before(self): self.instr.set_text(get_result())
def __init__(self, **kwargs): super().__init__(**kwargs) self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8) self.instr = ScrollLabel('', textcolor = '#FFFFFF') self.btn = Button(text='Завершить', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next self.outer.add_widget(self.instr) self.outer.add_widget(self.btn) self.add_widget(self.outer) self.on_enter = self.before
def __init__(self, **kwargs): super().__init__(**kwargs) self.next_screen = False self.stage = 0 instr = ScrollLabel(txt_test3, textcolor='#FFFFFF') self.lbl1 = ScrollLabel('Считайте пульс', textcolor='#FFFFFF') self.lbl_sec = Seconds(15, textcolor='#FFFFFF') self.lbl_sec.bind(done=self.sec_finished) line0 = ColoredLayout(lcolor=(0, 0.5, 0.01, 1)) vlay = ColoredLayout(orientation='vertical', lcolor=(0.44, 0.44, 0.44, 1)) vlay.add_widget(self.lbl1) vlay.add_widget(self.lbl_sec) line0.add_widget(instr) line0.add_widget(vlay) line1 = BoxLayout(size_hint=(0.8, None), height='30sp') lbl_result1 = Label(text='Результат:', halign='right') self.in_result1 = TextInput(text='0', multiline=False) self.in_result1.set_disabled(True) line1.add_widget(lbl_result1) line1.add_widget(self.in_result1) line2 = BoxLayout(size_hint=(0.8, None), height='30sp') lbl_result2 = Label(text='Результат после отдыха:', halign='right') self.in_result2 = TextInput(text='0', multiline=False) self.in_result2.set_disabled(True) line2.add_widget(lbl_result2) line2.add_widget(self.in_result2) self.btn = Button(text='Начать', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next outer = BoxLayout(orientation='vertical', padding=8, spacing=8) outer.add_widget(line0) outer.add_widget(line1) outer.add_widget(line2) outer.add_widget(self.btn) self.add_widget(outer)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_instruction) l1 = Label(text="Введите имя:") self.name_input = TextInput() l2 = Label(text="Введите возраст:") self.age_input = TextInput() self.btn = Button(text="Начать") self.btn.background_color = (0, 0.5, 0.5, 1) self.btn.on_press = self.next line1 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.name_input) line2 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line2.add_widget(l2) line2.add_widget(self.age_input) linemain = BoxLayout(orientation="vertical", padding=8, spacing=8) linemain.add_widget(instr) linemain.add_widget(line1) linemain.add_widget(line2) linemain.add_widget(self.btn) self.add_widget(linemain)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_test1) self.ltimer = Seconds(15) self.ltimer.bind(done=self.timer_end) self.start_button = Button(text='Начать') self.start_button.on_press = self.start_timer self.start_button.background_color = (0,0,1,1) l1 = Label(text='Запишите релузьтат') self.test1_input = TextInput() self.test1_input.set_disabled(True) line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.test1_input) self.button = Button(text='Далее') self.button.background_color = (1, 0, 0, 1) self.button.set_disabled(True) self.button.on_press = self.next main_line = BoxLayout(orientation='vertical', padding=8, spacing=8) main_line.add_widget(instr) main_line.add_widget(self.ltimer) main_line.add_widget(self.start_button) main_line.add_widget(line1) main_line.add_widget(self.button) self.add_widget(main_line)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_instruction) l1 = Label(text='Введите имя') self.user_name = TextInput() self.button = Button(text='Начать') self.button.background_color = (0, 1, 0, 1) self.button.on_press = self.next l2 = Label(text='Введите Ваш возраст') self.user_age = TextInput() line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp') line2 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.user_name) line2.add_widget(l2) line2.add_widget(self.user_age) main_line = BoxLayout(orientation='vertical', padding=8, spacing=8) main_line.add_widget(instr) main_line.add_widget(line1) main_line.add_widget(line2) main_line.add_widget(self.button) self.add_widget(main_line)
def __init__(self, **kwargs): super().__init__(**kwargs) self.l = ScrollLabel(ltext='') self.add_widget(self.l) self.on_enter = self.before
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_test1) self.ltimer = Seconds(15) self.ltimer.bind(done=self.timer_end) l1 = Label(text="Запишите результат") self.test_input = TextInput(text='0') self.test_input.set_disabled(True) self.btn = Button(text="Далее") self.btn.background_color = (0, 0.5, 0.5, 1) self.btn.set_disabled(True) self.btn.on_press = self.next line1 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.test_input) linemain = BoxLayout(orientation="vertical", padding=8, spacing=8) linemain.add_widget(instr) linemain.add_widget(self.ltimer) linemain.add_widget(line1) linemain.add_widget(self.btn) self.add_widget(linemain)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(txt_instruction, textcolor='#FFFFFF') lbl1 = Label(text='Введите имя:', halign='right') self.in_name = TextInput(multiline=False) lbl2 = Label(text='Введите возраст:', halign='right') self.in_age = TextInput(text='7', multiline=False) self.btn = Button(text='Начать', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next line1 = BoxLayout(size_hint=(0.8, None), height='30sp') line2 = BoxLayout(size_hint=(0.8, None), height='30sp') line1.add_widget(lbl1) line1.add_widget(self.in_name) line2.add_widget(lbl2) line2.add_widget(self.in_age) outer = BoxLayout(orientation='vertical', padding=8, spacing=8) outer.add_widget(instr) outer.add_widget(line1) outer.add_widget(line2) outer.add_widget(self.btn) self.add_widget(outer)
def scrolledWindow(self): vbox = Gtk.VBox() self.albumArtImage = Gtk.Image() self.albumArtImage.set_from_file('./images/AlbumArtEmpty.jpg') pixbuf = self.albumArtImage.get_pixbuf().scale_simple( 250, 250, GdkPixbuf.InterpType.BILINEAR) self.albumArtImage.set_from_pixbuf(pixbuf) self.albumArtImage.show() vbox.pack_start(self.albumArtImage, True, True, 5) self.musicLabel = ScrollLabel(1) #Gtk.Label() music = "[no music]" #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>") self.musicLabel.assign_markup( "<span size=\"12000\"><b> {0} </b></span>") self.musicLabel.set_markup(music) self.musicLabel.set_max_width_chars(25) self.musicLabel.set_ellipsize(Pango.EllipsizeMode.END) vbox.pack_start(self.musicLabel, False, False, 0) return (vbox)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_sitting) self.button = Button(text='Далее') self.button.background_color = (1, 0, 0, 1) self.button.on_press = self.next main_line = BoxLayout(orientation='vertical', padding=8, spacing=8) main_line.add_widget(instr) main_line.add_widget(self.button) self.add_widget(main_line)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_sitting) self.ltimer = Seconds(45) self.ltimer.bind(done=self.timer_end) self.btn = Button(text="Далее") self.btn.background_color = (0, 0.5, 0.5, 1) self.btn.on_press = self.next linemain = BoxLayout(orientation="vertical", padding=8, spacing=8) linemain.add_widget(instr) linemain.add_widget(self.ltimer) linemain.add_widget(self.btn) self.add_widget(linemain)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_test2) self.t1 = Seconds(15) self.t2 = Seconds(45) self.t3 = Seconds(15) self.t1.bind(done=self.t1_end) self.t2.bind(done=self.t2_end) self.t3.bind(done=self.t3_end) l1 = Label(text="Результат после приседаний:") self.test2_input = TextInput() self.test2_input.set_disabled(True) l2 = Label(text="Результат после отдыха:") self.test3_input = TextInput() self.test3_input.set_disabled(True) self.btn = Button(text="Нажми, если ты живой") self.btn.background_color = (0, 0.5, 0.5, 1) self.btn.on_press = self.next self.btn.set_disabled(True) line1 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.test2_input) line2 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line2.add_widget(l2) line2.add_widget(self.test3_input) linemain = BoxLayout(orientation="vertical", padding=8, spacing=8) linemain.add_widget(instr) linemain.add_widget(line1) linemain.add_widget(line2) linemain.add_widget(self.btn) self.add_widget(linemain)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_test2) l1 = Label(text='Результат после приседаний:') self.test2_input = TextInput() l2 = Label(text='Результат после отдыха:') self.test3_input = TextInput() self.button = Button(text='Показать результат') self.button.background_color = (1, 0, 0, 1) self.button.on_press = self.next line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp') line2 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.test2_input) line2.add_widget(l2) line2.add_widget(self.test3_input) main_line = BoxLayout(orientation='vertical', padding=8, spacing=8) main_line.add_widget(instr) main_line.add_widget(line1) main_line.add_widget(line2) main_line.add_widget(self.button) self.add_widget(main_line)
def __init__(self, **kwargs): super().__init__(**kwargs) instr = ScrollLabel(ltext=txt_test2) l1 = Label(text=" Результат после приседания") self.test2_input = TextInput() l2 = Label(text="") self.test3_input = TextInput() self.t1 = Seconds(15) self.t2 = Seconds(45) self.t3 = Seconds(15) self.btn = Button(text="Показать результат") self.btn.background_color = (0, 0.5, 0.5, 1) self.btn.on_press = self.next line1 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line1.add_widget(l1) line1.add_widget(self.test2_input) line2 = BoxLayout(orientation="vertical", size_hint=(1, None), height='60sp') line2.add_widget(l2) line2.add_widget(self.test3_input) linemain = BoxLayout(orientation="vertical", padding=8, spacing=8) linemain.add_widget(instr) linemain.add_widget(line1) linemain.add_widget(line2) linemain.add_widget(self.btn) self.add_widget(linemain)
class PulseScr2(Screen): def __init__(self, **kwargs): super().__init__(**kwargs) self.next_screen = False self.stage = 0 instr = ScrollLabel(txt_test3, textcolor='#FFFFFF') self.lbl1 = ScrollLabel('Считайте пульс', textcolor='#FFFFFF') self.lbl_sec = Seconds(15, textcolor='#FFFFFF') self.lbl_sec.bind(done=self.sec_finished) line0 = ColoredLayout(lcolor=(0, 0.5, 0.01, 1)) vlay = ColoredLayout(orientation='vertical', lcolor=(0.44, 0.44, 0.44, 1)) vlay.add_widget(self.lbl1) vlay.add_widget(self.lbl_sec) line0.add_widget(instr) line0.add_widget(vlay) line1 = BoxLayout(size_hint=(0.8, None), height='30sp') lbl_result1 = Label(text='Результат:', halign='right') self.in_result1 = TextInput(text='0', multiline=False) self.in_result1.set_disabled(True) line1.add_widget(lbl_result1) line1.add_widget(self.in_result1) line2 = BoxLayout(size_hint=(0.8, None), height='30sp') lbl_result2 = Label(text='Результат после отдыха:', halign='right') self.in_result2 = TextInput(text='0', multiline=False) self.in_result2.set_disabled(True) line2.add_widget(lbl_result2) line2.add_widget(self.in_result2) self.btn = Button(text='Начать', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5}) self.btn.background_color = btn_color self.btn.on_press = self.next outer = BoxLayout(orientation='vertical', padding=8, spacing=8) outer.add_widget(line0) outer.add_widget(line1) outer.add_widget(line2) outer.add_widget(self.btn) self.add_widget(outer) def sec_finished(self, instance, value): if value: if self.stage == 0: self.stage = 1 self.lbl1.set_text('Отдыхайте') self.lbl_sec.restart(30) self.in_result1.set_disabled(False) elif self.stage == 1: self.stage = 2 self.lbl1.set_text('Считайте пульс') self.lbl_sec.restart(15) elif self.stage == 2: self.in_result2.set_disabled(False) self.btn.set_disabled(False) self.btn.text = 'Завершить' self.next_screen = True def next(self): if not self.next_screen: self.btn.set_disabled(True) self.lbl_sec.start() else: global p2, p3 p2 = check_int(self.in_result1.text) p3 = check_int(self.in_result2.text) if p2 == False and p3 == False: p2 = 0 self.in_result1.text = str(p2) p3 = 0 self.in_result2.text = str(p3) elif p2 == False: p2 = 0 self.in_result1.text = str(p2) elif p3 == False: p3 = 0 self.in_result2.text = str(p3) else: self.in_result1.text = '0' self.in_result2.text = '0' self.manager.current = 'result'
def scrolledWindow(self): topVbox = Gtk.VBox() stateHBox = Gtk.HBox() self.xportStateImage = Gtk.Image() self.xportStateImage.set_from_pixbuf( imageManager.get_image('stop').Scale(16, 16)) stateHBox.pack_start(self.xportStateImage, False, False, 5) xportStateLabel = Gtk.Label() xportStateLabel.set_markup("<span size=\"15000\">Now Playing</span>") xportStateLabel.set_alignment(0.0, 0.5) stateHBox.pack_start(xportStateLabel, True, True, 5) self.crossFadeImage = Gtk.Image() self.crossFadeImage.set_from_pixbuf( imageManager.get_pixbuf('crossFade')) stateHBox.pack_start(self.crossFadeImage, False, False, 5) self.playModeShuffleImage = Gtk.Image() self.playModeShuffleImage.set_from_pixbuf( imageManager.get_pixbuf('shuffle')) stateHBox.pack_start(self.playModeShuffleImage, False, False, 5) self.playModeRepeatImage = Gtk.Image() self.playModeRepeatImage.set_from_pixbuf( imageManager.get_pixbuf('repeat')) stateHBox.pack_start(self.playModeRepeatImage, False, False, 5) topVbox.pack_start(stateHBox, False, False, 0) detailHBox = Gtk.HBox() self.albumArtImage = Gtk.Image() self.albumArtImage.set_from_pixbuf(imageManager.get_pixbuf('noArt')) detailHBox.pack_start(self.albumArtImage, False, False, 5) detailVBox = Gtk.VBox() self.trackNumberLabel = Gtk.Label("Track [x/y]") self.trackNumberLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(self.trackNumberLabel, True, False, 0) mf = "<b>{0}</b>" self.trackNameLabel = ScrollLabel(1) #Gtk.Label() #self.trackNameLabel.set_markup("<span weight=\"bold\">Track Name Goes Here In Bold</span>") self.trackNameLabel.set_markup("Track Name Goes Here In Bold") self.trackNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.trackNameLabel.set_alignment(0.0, 0.5) self.trackNameLabel.assign_markup(mf) self.scrollLabels.append(self.trackNameLabel) detailVBox.pack_start(self.trackNameLabel, True, False, 0) self.trackProgressBar = Gtk.ProgressBar() detailVBox.pack_start(self.trackProgressBar, True, False, 0) self.trackProgressTimeLabel = Gtk.Label("--:--/--:--") self.trackProgressTimeLabel.set_alignment(1.0, 0.5) detailVBox.pack_start(self.trackProgressTimeLabel, True, False, 0) artistsLabel = Gtk.Label("Artists") artistsLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(artistsLabel, True, False, 0) self.artistsNameLabel = ScrollLabel(1) #Gtk.Label() self.artistsNameLabel.set_markup("Artist Name Goes Here") self.artistsNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.artistsNameLabel.set_alignment(0.0, 0.5) self.artistsNameLabel.assign_markup(mf) self.scrollLabels.append(self.artistsNameLabel) detailVBox.pack_start(self.artistsNameLabel, True, False, 0) separatorLine = Gtk.Image() separatorLine.set_from_pixbuf(imageManager.get_pixbuf('separator')) detailVBox.pack_start(separatorLine, True, False, 0) albumsLabel = Gtk.Label("Albums") albumsLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(albumsLabel, True, False, 0) self.albumNameLabel = ScrollLabel(1) #Gtk.Label() self.albumNameLabel.set_markup("Album Name Goes Here") self.albumNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.albumNameLabel.set_alignment(0.0, 0.5) self.albumNameLabel.assign_markup(mf) self.scrollLabels.append(self.albumNameLabel) detailVBox.pack_start(self.albumNameLabel, True, False, 0) detailHBox.pack_start(detailVBox, True, True, 5) topVbox.pack_start(detailHBox, True, True, 2) return (topVbox)
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(900, 670) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 40, 800, 600)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.times = QtWidgets.QLineEdit(self.gridLayoutWidget) self.times.setObjectName("times") self.gridLayout.addWidget(self.times, 3, 1, 1, 1) self.times.setText("1") self.onlyInt = QIntValidator() self.onlyInt.setBottom(1) self.times.setValidator((self.onlyInt)) self.sp = QSlider(Qt.Horizontal) self.sp.setMinimum(1) self.sp.setMaximum(50) self.sp.setValue(1) self.gridLayout.addWidget(self.sp, 4, 0, 2, 2) self.sp.valueChanged.connect(self.sliderD) self.sliderLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) self.sliderLabel.setFont(font) self.sliderLabel.setFrameShape(QtWidgets.QFrame.NoFrame) self.sliderLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.sliderLabel.setObjectName("sliderLabel") self.gridLayout.addWidget(self.sliderLabel, 4, 0, 1, 1) self.sliderLabel.setText("Number of dice thrown at once: 1") self.numFaces = QtWidgets.QLineEdit(self.gridLayoutWidget) self.numFaces.setObjectName("numFaces") self.gridLayout.addWidget(self.numFaces, 3, 0, 1, 1) self.numFaces.setText("6") self.numFaces.setValidator((self.onlyInt)) self.generateButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.generateButton.setObjectName("generateButton") self.generateButton.clicked.connect(self.generate) self.gridLayout.addWidget(self.generateButton, 0, 0, 1, 1) self.loadFileButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.loadFileButton.setObjectName("loadFileButton") self.loadFileButton.clicked.connect(self.load) self.loadFileButton.setText("Load file") self.gridLayout.addWidget(self.loadFileButton, 13, 1, 1, 1) self.saveFileButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.saveFileButton.setObjectName("saveFileButton") self.saveFileButton.clicked.connect(self.save) self.saveFileButton.setText("Save data") self.gridLayout.addWidget(self.saveFileButton, 13, 0, 1, 1) self.showHistoryButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.showHistoryButton.setObjectName("showHistoryButton") self.showHistoryButton.clicked.connect(self.showHistory) self.gridLayout.addWidget(self.showHistoryButton, 7, 0, 1, 0) self.numFacesLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) self.numFacesLabel.setFont(font) self.numFacesLabel.setFrameShape(QtWidgets.QFrame.NoFrame) self.numFacesLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.numFacesLabel.setObjectName("numFacesLabel") self.gridLayout.addWidget(self.numFacesLabel, 2, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) self.clearButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.clearButton.setObjectName("clearButton") self.gridLayout.addWidget(self.clearButton, 0, 1, 1, 1) self.clearButton.clicked.connect(self.reset) self.timesLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) font.setItalic(False) self.timesLabel.setFont(font) self.timesLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.timesLabel.setObjectName("timesLabel") self.gridLayout.addWidget(self.timesLabel, 2, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(15) font.setItalic(True) self.label_3.setFont(font) self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 6, 0, 1, 2) self.label_3.setText("Last random number: - ") self.label_3.setStyleSheet("color: black;") spacerItem1 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.gridLayout.addItem(spacerItem1, 5, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.figure = pyplot.figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, MainWindow) self.gridLayout.addWidget(self.toolbar, 9, 0, 1, 2) self.gridLayout.addWidget(self.canvas, 11, 0, 2, 2) self.label = ScrollLabel(MainWindow) self.gridLayout.addWidget(self.label, 8, 0, 1, 2) self.showHistoryButton.setText("Show history") self.showHistoryButton.close()
class Ui_MainWindow(object): history = [] minValue = 0 maxValue = 10 def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(900, 670) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 40, 800, 600)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.times = QtWidgets.QLineEdit(self.gridLayoutWidget) self.times.setObjectName("times") self.gridLayout.addWidget(self.times, 3, 1, 1, 1) self.times.setText("1") self.onlyInt = QIntValidator() self.onlyInt.setBottom(1) self.times.setValidator((self.onlyInt)) self.sp = QSlider(Qt.Horizontal) self.sp.setMinimum(1) self.sp.setMaximum(50) self.sp.setValue(1) self.gridLayout.addWidget(self.sp, 4, 0, 2, 2) self.sp.valueChanged.connect(self.sliderD) self.sliderLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) self.sliderLabel.setFont(font) self.sliderLabel.setFrameShape(QtWidgets.QFrame.NoFrame) self.sliderLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.sliderLabel.setObjectName("sliderLabel") self.gridLayout.addWidget(self.sliderLabel, 4, 0, 1, 1) self.sliderLabel.setText("Number of dice thrown at once: 1") self.numFaces = QtWidgets.QLineEdit(self.gridLayoutWidget) self.numFaces.setObjectName("numFaces") self.gridLayout.addWidget(self.numFaces, 3, 0, 1, 1) self.numFaces.setText("6") self.numFaces.setValidator((self.onlyInt)) self.generateButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.generateButton.setObjectName("generateButton") self.generateButton.clicked.connect(self.generate) self.gridLayout.addWidget(self.generateButton, 0, 0, 1, 1) self.loadFileButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.loadFileButton.setObjectName("loadFileButton") self.loadFileButton.clicked.connect(self.load) self.loadFileButton.setText("Load file") self.gridLayout.addWidget(self.loadFileButton, 13, 1, 1, 1) self.saveFileButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.saveFileButton.setObjectName("saveFileButton") self.saveFileButton.clicked.connect(self.save) self.saveFileButton.setText("Save data") self.gridLayout.addWidget(self.saveFileButton, 13, 0, 1, 1) self.showHistoryButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.showHistoryButton.setObjectName("showHistoryButton") self.showHistoryButton.clicked.connect(self.showHistory) self.gridLayout.addWidget(self.showHistoryButton, 7, 0, 1, 0) self.numFacesLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) self.numFacesLabel.setFont(font) self.numFacesLabel.setFrameShape(QtWidgets.QFrame.NoFrame) self.numFacesLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.numFacesLabel.setObjectName("numFacesLabel") self.gridLayout.addWidget(self.numFacesLabel, 2, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) self.clearButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.clearButton.setObjectName("clearButton") self.gridLayout.addWidget(self.clearButton, 0, 1, 1, 1) self.clearButton.clicked.connect(self.reset) self.timesLabel = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(8) font.setItalic(False) self.timesLabel.setFont(font) self.timesLabel.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.timesLabel.setObjectName("timesLabel") self.gridLayout.addWidget(self.timesLabel, 2, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget) font = QtGui.QFont() font.setPointSize(15) font.setItalic(True) self.label_3.setFont(font) self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 6, 0, 1, 2) self.label_3.setText("Last random number: - ") self.label_3.setStyleSheet("color: black;") spacerItem1 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.gridLayout.addItem(spacerItem1, 5, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.figure = pyplot.figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, MainWindow) self.gridLayout.addWidget(self.toolbar, 9, 0, 1, 2) self.gridLayout.addWidget(self.canvas, 11, 0, 2, 2) self.label = ScrollLabel(MainWindow) self.gridLayout.addWidget(self.label, 8, 0, 1, 2) self.showHistoryButton.setText("Show history") self.showHistoryButton.close() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "ProbDice")) self.generateButton.setText(_translate("MainWindow", "Throw the dice")) self.numFacesLabel.setText(_translate("MainWindow", "Number of faces")) self.clearButton.setText(_translate("MainWindow", "Reset")) self.timesLabel.setText(_translate("MainWindow", "Times")) def showHistory(self): self.label.setText(self.history) self.label.show() def sliderD(self): self.sliderLabel.setText("Number of dice thrown at once: " + str(self.sp.value())) def generate(self): if not (self.times.hasAcceptableInput() and self.numFaces.hasAcceptableInput()): self.label_3.setText("You can only enter integers greater than 0") self.label_3.setStyleSheet("color: red;") else: i = 0 j = 0 # Since times.text() is always greater or equal than 1, num, always has a value while i < int(self.times.text()): num = 0 while j < self.sp.value(): num += random.randint(1, int(self.numFaces.text())) j = j + 1 self.history.append(num) j = 0 i = i + 1 self.label_3.setStyleSheet("color: black;") self.label_3.setText("Last random number: " + str(num)) self.plot() if len(self.history) < 100000: self.showHistory() else: self.label.setTextW( "For large data sets it may take some time to generate the history, (the histogram is always updated)" ) self.label.show() self.showHistoryButton.show() def reset(self): self.label_3.setStyleSheet("color: black;") self.history.clear() self.label_3.setText("Last random number: - ") self.figure.clear() self.canvas.draw() self.label.clear() self.showHistoryButton.hide() def plot(self): self.figure.clear() self.figure.add_subplot() pyplot.hist( self.history, bins=np.arange(1, int(self.numFaces.text()) * self.sp.value() + 2) - 0.5, ec="w", weights=np.ones(len(self.history)) / len(self.history)) pyplot.gca().yaxis.set_major_formatter(PercentFormatter(1)) self.canvas.draw() def load(self): try: self.history = interactFiles.load(self.history) self.showHistoryButton.show() self.plot() except: self.label_3.setText( "The file selected has not the proper format or data") self.label_3.setStyleSheet("color: red;") self.label.setTextW( "In the file there can only be numbers, they can be placed with a space between them (1 2 3), with commas (1,2,3) or (1, 2, 3) or place a number per line" ) self.label.show() def save(self): try: interactFiles.save(self.history) self.label_3.setText("The file has been saved correctly") self.label_3.setStyleSheet("color: black;") except: self.label_3.setText("The file has not been saved correctly") self.label_3.setStyleSheet("color: red;")
class MusicPlayingPage(PageBase): class zoneListener(ZoneListener): def __init__(self, owner): super().__init__(owner) def on_selected_zone_changed(self): if self.owner.pageInView == True: self.owner.on_Page_Entered_View(None) def on_zone_transport_change_event(self, event): if self.owner.pageInView == True: self.owner.on_zone_transport_change_event(event) def on_zone_render_change_event(self, event): pass def on_zone_queue_update_begin(self): pass def on_zone_queue_update_end(self): pass def on_current_track_update_state(self, trackInfo): self.owner.on_current_track_update_state(trackInfo) def close_play_mode_dialog(self): self.playModeDialog.destroy() self.playModeDialog = None def handlePlayModeResponse(self): response = self.playModeDialog.get_response() self.close_play_mode_dialog() zone = self.topLevel.get_selected_zone() if zone is not None: if response == PlayModeDialog.Choice.PLAY_NORMAL: zone.play_mode('NORMAL') elif response == PlayModeDialog.Choice.PLAY_SHUFFLE: zone.play_mode('SHUFFLE') elif response == PlayModeDialog.Choice.PLAY_REPEAT: zone.play_mode('REPEAT_ALL') elif response == PlayModeDialog.Choice.PLAY_SHUFFLE_REPEAT: zone.play_mode('SHUFFLE_NOREPEAT') elif response == PlayModeDialog.Choice.CROSSFADE: zone.cross_fade(True if self.crossFadeMode == '0' else False) def on_zoneButton_Clicked(self): # Close all open dialogs. if self.playModeDialog is not None: self.close_play_mode_dialog() super().on_zoneButton_Clicked() def on_Page_Entered_View(self, SelectedZone): super().on_Page_Entered_View(SelectedZone) # Update the page when it shows up with # the latest information. if self.selectedZone is not None: self.on_zone_transport_change_event( self.selectedZone.get_current_transport_info()) trackInfo = self.selectedZone.get_current_track_info() self.set_current_track_details(trackInfo) self.set_album_art(trackInfo) print("Music playing view") # get uri and metadata of what's playing media_info = self.selectedZone.sonos.avTransport.GetMediaInfo( [('InstanceID', 0)] ) #this uses SoCo to access the underlying UPNP calls which gets AV data which s different to s.get_current_track_info() #uri = media_info['CurrentURI'] metadata = media_info['CurrentURIMetaData'] # ## later you can play this station by: #s.play_uri(uri=uri, meta=metadata) def on_Page_Exit_View(self): super().on_Page_Exit_View() # Stop all timeouts for label in self.scrollLabels: label.stop() def on_Button_A_Clicked(self): if self.playModeDialog is None: self.playModeDialog = PlayModeDialog(self) self.playModeDialog.set_decorated(False) else: self.handlePlayModeResponse() def on_Button_B_Clicked(self): pass def on_Button_C_Clicked(self): if self.playModeDialog is not None: self.close_play_mode_dialog() self.topLevel.show_queue_page() def on_Return_Button_Clicked(self): if self.playModeDialog is None: self.topLevel.show_page("MusicPage") else: self.close_play_mode_dialog() # The scroll wheel def on_Scroll_Up(self): if self.playModeDialog is not None: self.playModeDialog.on_Scroll_Up() def on_Scroll_Down(self): if self.playModeDialog is not None: self.playModeDialog.on_Scroll_Down() def on_Button_Ok_Clicked(self): if self.playModeDialog is None: self.topLevel.show_page("MusicAlbumArtPage") else: self.handlePlayModeResponse() def set_album_art(self, data): artUri = "" if 'album_art_uri' in data: artUri = data['album_art_uri'] elif 'album_art' in data: artUri = data['album_art'] if artUri != "": self.albumArtUri = self.topLevel.get_selected_zone( ).sonos.music_library.build_album_art_full_uri(artUri) response = requests.get(self.albumArtUri) if response.status_code == 200: im = Image(None) im.SetFromStream(response.content) self.albumArtImage.set_from_pixbuf(im.Scale(128, 128)) else: self.albumArtImage.set_from_pixbuf( imageManager.get_pixbuf('noArt')) def set_current_track_details(self, data): string = "" #GLib.markup_escape_text(data['title']) self.trackNameLabel.set_markup(data['title']) if 'creator' in data: string = data[ 'creator'] # GLib.markup_escape_text(data['creator']) elif 'artist' in data: string = data['artist'] #string = GLib.markup_escape_text(data['artist']) #self.artistsNameLabel.set_markup("<b>" + string + "</b>") self.artistsNameLabel.set_markup(string) #string = GLib.markup_escape_text(data['album']) #self.albumNameLabel.set_markup("<b>" + string + "</b>") self.albumNameLabel.set_markup(data['album']) if 'duration' in data and 'position' in data: self.on_current_track_update_state(data) def on_zone_transport_change_event(self, event): mutex.acquire() try: if hasattr(event, 'variables'): varDict = event.variables else: varDict = event if 'current_play_mode' in varDict: currentPlayMode = varDict['current_play_mode'] if currentPlayMode == 'SHUFFLE_NOREPEAT': self.playModeRepeatImage.clear() self.playModeShuffleImage.set_from_pixbuf( imageManager.get_pixbuf('shuffle')) elif currentPlayMode == 'REPEAT_ALL': self.playModeRepeatImage.set_from_pixbuf( imageManager.get_pixbuf('repeat')) self.playModeShuffleImage.clear() elif currentPlayMode == 'NORMAL': self.playModeRepeatImage.clear() self.playModeShuffleImage.clear() elif currentPlayMode == 'SHUFFLE': # shuffle and repeat self.playModeRepeatImage.set_from_pixbuf( imageManager.get_pixbuf('repeat')) self.playModeShuffleImage.set_from_pixbuf( imageManager.get_pixbuf('suffle')) if 'transport_state' in varDict: xportState = varDict['transport_state'] if xportState == 'PAUSED_PLAYBACK': self.xportStateImage.set_from_pixbuf( imageManager.get_pixbuf('pause')) elif xportState == 'TRANSITIONING': self.xportStateImage.set_from_pixbuf( imageManager.get_pixbuf('transition')) elif xportState == 'PLAYING': self.xportStateImage.set_from_pixbuf( imageManager.get_pixbuf('play')) elif xportState == 'STOPPED': self.xportStateImage.set_from_pixbuf( imageManager.get_pixbuf('stop')) self.trackProgressBar.set_fraction(0.0) self.trackProgressTimeLabel.set_text("--:--/--:--") else: self.xportStateImage.set_from_pixbuf( imageManager.get_pixbuf('shrug')) if 'current_crossfade_mode' in varDict: self.crossFadeMode = varDict['current_crossfade_mode'] if self.crossFadeMode == '1': self.crossFadeImage.set_from_pixbuf( imageManager.get_pixbuf('crossFade')) else: self.crossFadeImage.clear() if 'next_track_meta_data' in varDict: nextTrackMetaData = varDict['next_track_meta_data'] if nextTrackMetaData is not '': nextTrackMetaData = nextTrackMetaData.to_dict() nextTrackTitle = GLib.markup_escape_text( nextTrackMetaData['title']) nextTrackArtist = GLib.markup_escape_text( nextTrackMetaData['creator']) #string = "<b>{0} - {1}</b>" string = "{0} - {1}" self.nextTrackLabel.set_text("Next: ") string = string.format(nextTrackTitle, nextTrackArtist) self.nextTrackNameLabel.set_markup(string) else: self.nextTrackLabel.set_text("") self.nextTrackNameLabel.set_text("") if 'current_track' in varDict and 'number_of_tracks' in varDict: currentTrack = varDict['current_track'] numberOfTracks = varDict['number_of_tracks'] string = "Track [{0}/{1}]" self.trackNumberLabel.set_text( string.format(currentTrack, numberOfTracks)) self.inQueueLabel.set_text("In Queue: ") string = "<b>{0}</b>" self.inQueueCountLabel.set_markup( string.format(numberOfTracks)) else: self.trackNumberLabel.set_text("Track") self.inQueueLabel.set_text("") self.inQueueCountLabel.set_text("") if 'current_track_meta_data' in varDict: currentTrackMetaData = varDict['current_track_meta_data'] if currentTrackMetaData is not '': currentTrackMetaData = currentTrackMetaData.to_dict() self.set_current_track_details(currentTrackMetaData) self.trackProgressBar.show() self.trackProgressTimeLabel.show() if self.topLevel.get_selected_zone() is not None: self.set_album_art(currentTrackMetaData) else: #Display the blank album art image self.albumArtImage.set_from_pixbuf( imageManager.get_pixbuf('noArt')) else: self.trackNameLabel.set_markup("<b>[no music]</b>") self.artistsNameLabel.set_text("") self.albumNameLabel.set_text("") self.albumArtImage.set_from_pixbuf( imageManager.get_pixbuf('noArt')) self.trackProgressBar.hide() self.trackProgressTimeLabel.hide() finally: mutex.release() def on_current_track_update_state(self, trackInfo): mutex.acquire() try: # grab the values from the current track # state and update the gui if isinstance(trackInfo, dict): trackPos = trackInfo['position'].split(':') trackLen = trackInfo['duration'].split(':') try: tpH = int(trackPos[0]) tpM = int(trackPos[1]) tpS = int(trackPos[2]) tlH = int(trackLen[0]) tlM = int(trackLen[1]) tlS = int(trackLen[2]) trackProg = float((tpH * 24) + (tpM * 60) + tpS) trackDur = float((tlH * 24) + (tlM * 60) + tlS) tpos = ((trackPos[0] + ":") if tpH > 0 else "") + trackPos[1] + ":" + trackPos[2] tdur = ((trackLen[0] + ":") if tlH > 0 else "") + trackLen[1] + ":" + trackLen[2] if trackDur > 0.0: self.trackProgressBar.set_fraction(trackProg / trackDur) self.trackProgressTimeLabel.set_text(tpos + "/" + tdur) else: self.trackProgressTimeLabel.set_text("") except ValueError: self.trackProgressTimeLabel.set_text("") finally: mutex.release() def title(self): self.titleLabel = Gtk.Label("Now Playing") return (self.titleLabel) def scrolledWindow(self): topVbox = Gtk.VBox() stateHBox = Gtk.HBox() self.xportStateImage = Gtk.Image() self.xportStateImage.set_from_pixbuf( imageManager.get_image('stop').Scale(16, 16)) stateHBox.pack_start(self.xportStateImage, False, False, 5) xportStateLabel = Gtk.Label() xportStateLabel.set_markup("<span size=\"15000\">Now Playing</span>") xportStateLabel.set_alignment(0.0, 0.5) stateHBox.pack_start(xportStateLabel, True, True, 5) self.crossFadeImage = Gtk.Image() self.crossFadeImage.set_from_pixbuf( imageManager.get_pixbuf('crossFade')) stateHBox.pack_start(self.crossFadeImage, False, False, 5) self.playModeShuffleImage = Gtk.Image() self.playModeShuffleImage.set_from_pixbuf( imageManager.get_pixbuf('shuffle')) stateHBox.pack_start(self.playModeShuffleImage, False, False, 5) self.playModeRepeatImage = Gtk.Image() self.playModeRepeatImage.set_from_pixbuf( imageManager.get_pixbuf('repeat')) stateHBox.pack_start(self.playModeRepeatImage, False, False, 5) topVbox.pack_start(stateHBox, False, False, 0) detailHBox = Gtk.HBox() self.albumArtImage = Gtk.Image() self.albumArtImage.set_from_pixbuf(imageManager.get_pixbuf('noArt')) detailHBox.pack_start(self.albumArtImage, False, False, 5) detailVBox = Gtk.VBox() self.trackNumberLabel = Gtk.Label("Track [x/y]") self.trackNumberLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(self.trackNumberLabel, True, False, 0) mf = "<b>{0}</b>" self.trackNameLabel = ScrollLabel(1) #Gtk.Label() #self.trackNameLabel.set_markup("<span weight=\"bold\">Track Name Goes Here In Bold</span>") self.trackNameLabel.set_markup("Track Name Goes Here In Bold") self.trackNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.trackNameLabel.set_alignment(0.0, 0.5) self.trackNameLabel.assign_markup(mf) self.scrollLabels.append(self.trackNameLabel) detailVBox.pack_start(self.trackNameLabel, True, False, 0) self.trackProgressBar = Gtk.ProgressBar() detailVBox.pack_start(self.trackProgressBar, True, False, 0) self.trackProgressTimeLabel = Gtk.Label("--:--/--:--") self.trackProgressTimeLabel.set_alignment(1.0, 0.5) detailVBox.pack_start(self.trackProgressTimeLabel, True, False, 0) artistsLabel = Gtk.Label("Artists") artistsLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(artistsLabel, True, False, 0) self.artistsNameLabel = ScrollLabel(1) #Gtk.Label() self.artistsNameLabel.set_markup("Artist Name Goes Here") self.artistsNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.artistsNameLabel.set_alignment(0.0, 0.5) self.artistsNameLabel.assign_markup(mf) self.scrollLabels.append(self.artistsNameLabel) detailVBox.pack_start(self.artistsNameLabel, True, False, 0) separatorLine = Gtk.Image() separatorLine.set_from_pixbuf(imageManager.get_pixbuf('separator')) detailVBox.pack_start(separatorLine, True, False, 0) albumsLabel = Gtk.Label("Albums") albumsLabel.set_alignment(0.0, 0.5) detailVBox.pack_start(albumsLabel, True, False, 0) self.albumNameLabel = ScrollLabel(1) #Gtk.Label() self.albumNameLabel.set_markup("Album Name Goes Here") self.albumNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.albumNameLabel.set_alignment(0.0, 0.5) self.albumNameLabel.assign_markup(mf) self.scrollLabels.append(self.albumNameLabel) detailVBox.pack_start(self.albumNameLabel, True, False, 0) detailHBox.pack_start(detailVBox, True, True, 5) topVbox.pack_start(detailHBox, True, True, 2) return (topVbox) def status(self): bottomHBox = Gtk.HBox() self.nextTrackLabel = Gtk.Label("Next: ") bottomHBox.pack_start(self.nextTrackLabel, False, False, 0) self.nextTrackNameLabel = ScrollLabel(1) #Gtk.Label() self.nextTrackNameLabel.set_markup("Track Name - Artist Name") self.nextTrackNameLabel.assign_markup("<b>{0}</b>") self.nextTrackNameLabel.set_max_width_chars(21) self.nextTrackNameLabel.set_ellipsize(Pango.EllipsizeMode.END) self.scrollLabels.append(self.nextTrackNameLabel) bottomHBox.pack_start(self.nextTrackNameLabel, True, True, 0) queueImage = Gtk.Image() queueImage.set_from_pixbuf( imageManager.get_image('queue').Scale(16, 16)) bottomHBox.pack_start(queueImage, False, False, 2) self.inQueueLabel = Gtk.Label("In Queue: ") bottomHBox.pack_start(self.inQueueLabel, False, False, 0) self.inQueueCountLabel = Gtk.Label() self.inQueueCountLabel.set_markup("<b>##</b>") self.inQueueCountLabel.set_ellipsize(Pango.EllipsizeMode.END) bottomHBox.pack_start(self.inQueueCountLabel, False, False, 0) return bottomHBox def footer(self): grid = Gtk.Grid() l = Gtk.Label("Play Mode") l.set_hexpand(True) l.set_size_request(100, -1) grid.add(l) l = Gtk.Label(" ") l.set_hexpand(True) l.set_size_request(100, -1) grid.attach(l, 1, 0, 1, 1) l = Gtk.Label("View Queue") l.set_hexpand(True) l.set_size_request(100, -1) grid.attach(l, 2, 0, 1, 1) return grid def __init__(self, topLevel): self.scrollLabels = [] super().__init__(topLevel) self.crossFadeMode = '0' self.playModeDialog = None self.zlistener = self.zoneListener(self) self.topLevel.add_zone_listener(self.__class__.__name__, self.zlistener)
def __init__(self, **kwargs): super().__init__(**kwargs) index = ruffier_index(p1, p2, p3) self.l = ScrollLabel(ltext="") self.add_widget(self.l)
class MusicAlbumArtPage(PageBase): class zoneListener(ZoneListener): def __init__(self, owner): super().__init__(owner) def on_selected_zone_changed(self): if self.owner.pageInView == True: self.owner.on_Page_Entered_View(None) def on_zone_transport_change_event(self, event): if self.owner.pageInView == True: self.owner.on_zone_transport_change_event(event) def on_zone_render_change_event(self, event): pass def on_zone_queue_update_begin(self): pass def on_zone_queue_update_end(self): pass def on_current_track_update_state(self, trackInfo): pass def on_Page_Entered_View(self, SelectedZone): super().on_Page_Entered_View(SelectedZone) if self.selectedZone is not None: self.on_zone_transport_change_event( self.selectedZone.get_current_transport_info()) self.on_current_track_update_state( self.selectedZone.get_current_track_info()) print("Album art in view") def on_current_track_update_state(self, trackInfo): mutex.acquire() try: if isinstance(trackInfo, dict): self.set_album_art(trackInfo) if trackInfo['artist'] == "" or trackInfo["title"] == "": self.musicLabel.set_markup("[no music]") #self.musicLabel.set_markup("<span size=\"12000\"><b>[no music]</b></span>") else: #music = GLib.markup_escape_text(trackInfo['title'] + " - " + trackInfo['artist']) #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>") music = (trackInfo['title'] + " - " + trackInfo['artist']) self.musicLabel.set_markup(music) finally: mutex.release() def set_album_art(self, data): artUri = "" if 'album_art_uri' in data: artUri = data['album_art_uri'] elif 'album_art' in data: artUri = data['album_art'] if artUri != "": self.albumArtUri = self.topLevel.get_selected_zone( ).sonos.music_library.build_album_art_full_uri(artUri) response = requests.get(self.albumArtUri) if response.status_code == 200: im = Image(None) im.SetFromStream(response.content) self.albumArtImage.set_from_pixbuf(im.Scale(250, 250)) else: self.albumArtImage.set_from_pixbuf( imageManager.get_image('noArt').Scale(250, 250)) def on_zone_transport_change_event(self, event): mutex.acquire() try: if hasattr(event, 'variables'): varDict = event.variables else: varDict = event if 'current_track_meta_data' in varDict: currentTrackMetaData = varDict['current_track_meta_data'] if currentTrackMetaData is not '': currentTrackMetaData = currentTrackMetaData.to_dict() #music = GLib.markup_escape_text(currentTrackMetaData['title'] + " - " + currentTrackMetaData['creator']) #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>") music = (currentTrackMetaData['title'] + " - " + currentTrackMetaData['creator']) self.musicLabel.set_markup(music) #if self.topLevel.get_selected_zone() is not None and 'album_art_uri' in currentTrackMetaData: if self.topLevel.get_selected_zone() is not None: self.set_album_art(currentTrackMetaData) else: #self.albumArtImage.set_from_file('./images/NoAlbumArt.jpg') self.albumArtImage.set_from_file( './images/AlbumArtEmpty.jpg') pixbuf = self.albumArtImage.get_pixbuf().scale_simple( 250, 250, GdkPixbuf.InterpType.BILINEAR) self.albumArtImage.set_from_pixbuf(pixbuf) else: #self.musicLabel.set_markup("<span size=\"12000\"><b>[no music]</b></span>") self.musicLabel.set_markup("[no music]") self.albumArtImage.set_from_file( './images/AlbumArtEmpty.jpg') pixbuf = self.albumArtImage.get_pixbuf().scale_simple( 250, 250, GdkPixbuf.InterpType.BILINEAR) self.albumArtImage.set_from_pixbuf(pixbuf) finally: mutex.release() def on_Button_A_Clicked(self): pass def on_Button_B_Clicked(self): pass def on_Button_C_Clicked(self): pass def on_Return_Button_Clicked(self): self.topLevel.show_page("MusicPlayingPage") # The scroll wheel def on_Scroll_Up(self): pass def on_Scroll_Down(self): pass def on_Button_Ok_Clicked(self): self.topLevel.show_page("MusicPlayingPage") def title(self): #self.titleLabel = Gtk.Label("Now Playing (Album Art)") return (Gtk.VBox()) def scrolledWindow(self): vbox = Gtk.VBox() self.albumArtImage = Gtk.Image() self.albumArtImage.set_from_file('./images/AlbumArtEmpty.jpg') pixbuf = self.albumArtImage.get_pixbuf().scale_simple( 250, 250, GdkPixbuf.InterpType.BILINEAR) self.albumArtImage.set_from_pixbuf(pixbuf) self.albumArtImage.show() vbox.pack_start(self.albumArtImage, True, True, 5) self.musicLabel = ScrollLabel(1) #Gtk.Label() music = "[no music]" #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>") self.musicLabel.assign_markup( "<span size=\"12000\"><b> {0} </b></span>") self.musicLabel.set_markup(music) self.musicLabel.set_max_width_chars(25) self.musicLabel.set_ellipsize(Pango.EllipsizeMode.END) vbox.pack_start(self.musicLabel, False, False, 0) return (vbox) def status(self): pass def footer(self): return Gtk.VBox() def __init__(self, topLevel): super().__init__(topLevel) self.zlistener = self.zoneListener(self) self.topLevel.add_zone_listener(self.__class__.__name__, self.zlistener)