class DigitalClock(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.initUI() def initUI(self): self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.Time) self.timer.start(10) self.clock_screen = QLCDNumber(self) self.clock_screen.resize(250,100) # Added self.lcd.move and moved the clock 30px down to make space for buttons self.clock_screen.move(0,30) self.clock_screen.display(strftime("%H" + ":" + "%M")) self.r1 = QRadioButton("Hide seconds", self) self.r1.move(10, 0) self.r2 = QRadioButton("Show seconds", self) self.r2.move(110, 0) self.r1.toggled.connect(self.woSecs) self.r2.toggled.connect(self.wSecs) # ---------Window settings -------------------------------- # Expanded window height by 30px self.setGeometry(300, 300, 250, 130) self.setWindowTitle("Digital Clock") self.setWindowIcon(QtGui.QIcon("")) self.show() # -------- Slots ------------------------------------------ def Time(self): global var if var == True: self.clock_screen.display(strftime("%H" + ":" + "%M")) elif var == False: self.clock_screen.display(strftime("%H" + ":" + "%M" + ":" + "%S")) def wSecs(self): global var var = False self.resize(375, 130) self.clock_screen.resize(375, 100) self.clock_screen.setDigitCount(8) def woSecs(self): global var var = True self.resize(250, 130) self.clock_screen.resize(250, 100) self.clock_screen.setDigitCount(5)
class DigitalClock(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Digital Clock - by ganesh') self.setGeometry(400,300,550,150) self.setWindowIcon(QtGui.QIcon('clock.png')) self.initUI() self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.current_time) self.timer.start(1000) def initUI(self): self.clock_screen = QLCDNumber(self) self.clock_screen.setStyleSheet("color: black; background-color: white") self.clock_screen.setDigitCount(8) self.clock_screen.setGeometry(QtCore.QRect(0, 0, 550, 150)) self.current_time() def current_time(self): current = time.strftime("%I:%M:%S") self.clock_screen.display(current)
def initUI(self): self.setWindowTitle('Apaki 显示进度') self.setWindowIcon(QIcon('./res/apaki.ico')) self.setGeometry(400, 300, 300, 200) lcd = QLCDNumber(self) lcd.setDigitCount(3) self.max_num = 255 self.slider = QSlider(Qt.Horizontal, self) self.slider.setMaximum(self.max_num) maxBt = QPushButton('最大值', self) minBt = QPushButton("最小值", self) # 两个按钮连接到同一个事件 maxBt.clicked.connect(self.buttonClicked) minBt.clicked.connect(self.buttonClicked) hbox = QHBoxLayout() hbox.addWidget(minBt) hbox.addWidget(maxBt) vbox = QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(self.slider) vbox.addLayout(hbox) self.setLayout(vbox) self.slider.valueChanged.connect(lcd.display) # 把自定义的closeApp信号连接到QMainWindow的close()槽上。 self.custom = Communicate() self.custom.closeApp.connect(self.close)
class Digital_clock(QMainWindow): def __init__(self): super().__init__() title = "Digital Clock -by Anirudh" top = 400 left = 300 width = 550 height = 150 icon = "clock.png" self.setWindowTitle(title) self.setGeometry(top, left, width, height) self.setWindowIcon((QIcon(icon))) self.initUI() self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.showTime) self.timer.start(1000) def initUI(self): self.clock_screen = QLCDNumber(self) self.clock_screen.setStyleSheet( "color : black ; background-color: white") self.clock_screen.setDigitCount(8) self.clock_screen.setGeometry(QtCore.QRect(0, 0, 550, 150)) self.showTime() def showTime(self): showTime = time.strftime("%I:%M:%S") self.clock_screen.display(showTime)
def __init__(self): super(MyWindow, self).__init__() self.initGUI("PyQt5 学习 LCDNumber") mainLayout = QGridLayout() self.setLayout(mainLayout) # 要展示的数据 price = 13.568 amount = 213 id = "18726345" lbl_price = QLabel("价格:") lbl_amount = QLabel("数量:") lbl_id = QLabel("商品编号:") lcd_price = QLCDNumber() lcd_price.setDecMode() lcd_price.setSmallDecimalPoint(True) lcd_price.display(price) mainLayout.addWidget(lbl_price, 0, 0) mainLayout.addWidget(lcd_price, 0, 1, 1, 3) lcd_amount = QLCDNumber() lcd_amount.display(amount) mainLayout.addWidget(lbl_amount, 1, 0) mainLayout.addWidget(lcd_amount, 1, 1, 1, 3) lcd_id = QLCDNumber() lcd_id.setDecMode() # NOTE: 设置能显示的数字的最大个数,如果不设置大一点,有可能显示不完整 lcd_id.setDigitCount(10) lcd_id.display(id) mainLayout.addWidget(lbl_id, 2, 0) mainLayout.addWidget(lcd_id, 2, 1, 1, 3)
class Demo(QWidget): def __init__(self): super(Demo, self).__init__() self.resize(600, 600) self.lcd_1 = QLCDNumber(self) # 1 self.lcd_1.setDigitCount(10) self.lcd_1.display(1234567890) # self.lcd_2 = QLCDNumber(self) # 2 # self.lcd_2.setSegmentStyle(QLCDNumber.Flat) # # self.lcd_2.setSmallDecimalPoint(True) # self.lcd_2.setDigitCount(10) # self.lcd_2.display(0.123456789) # # self.lcd_3 = QLCDNumber(self) # 3 # self.lcd_3.setSegmentStyle(QLCDNumber.Filled) # self.lcd_3.display('HELLO') # # self.lcd_4 = QLCDNumber(self) # 4 # self.lcd_4.setSegmentStyle(QLCDNumber.Outline) # self.lcd_4.setMode(QLCDNumber.Hex) # self.lcd_4.setDigitCount(6) # self.lcd_4.display(666) self.v_layout = QVBoxLayout() self.v_layout.addWidget(self.lcd_1) # self.v_layout.addWidget(self.lcd_2) # self.v_layout.addWidget(self.lcd_3) # self.v_layout.addWidget(self.lcd_4) self.setLayout(self.v_layout)
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lcd = QLCDNumber(self) # 设置数字类 self.lcd.setDigitCount(25) self.lcd.setMode(QLCDNumber.Dec) self.lcd.setSegmentStyle(QLCDNumber.Flat) self.lcd.setStyleSheet( "border: 1px solid green; color: green; background: silver;" ) # 设置显示的颜色样式 # vbox = QVBoxLayout() # 设置布局 # vbox.addWidget(self.lcd) # self.setLayout(vbox) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('hello') dir_path = os.path.abspath(os.path.dirname(__file__)) + '\image\\1.ico' self.setWindowIcon(QIcon(dir_path)) self.show() self.timer = QTimer() self.timer.start(1) self.timer.timeout.connect(self.flush) # 使用了计时器 ''' 创建计时器->设置1ms刷新间隔->每次刷新执行flush函数 ''' def flush(self): # 获取系统当前时间 dateTime = QDateTime.currentDateTime() # 显示的内容 self.lcd.display(dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"))
class Timer(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): timer = QTimer(self) timer.timeout.connect(self.updtTime) self.timeDisplay = QLCDNumber(self) self.timeDisplay.setSegmentStyle(QLCDNumber.Filled) self.timeDisplay.setDigitCount(8) self.updtTime() timer.start(1000) layout = QHBoxLayout() layout.addWidget(self.timeDisplay) self.setLayout(layout) self.setGeometry(300, 300, 500, 200) self.setWindowTitle('Timer') self.show() def updtTime(self): currentTime = QDateTime.currentDateTime().toString('hh:mm:ss') self.timeDisplay.display(currentTime)
def initUi(self): btn1 = QLCDNumber() btn1.setDigitCount(8) btn1.display("00:00:00") btn2 = QPushButton('Start') btn2.clicked.connect(self.start) btn3 = QPushButton('Reset') btn3.clicked.connect(self.reset) btn4 = QPushButton('Pause') btn4.clicked.connect(self.pause) layout = QGridLayout() layout.addWidget(btn1,1,0,1,2) layout.addWidget(btn2,1,2) layout.addWidget(btn4,1,3) layout.addWidget(btn3,1,4) self.setLayout(layout) self.btn1 = btn1 self.btn2 = btn2 self.initime = time.time() self.duration = 0 self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.refresh_time)
class Example(QWidget): ''' 液晶显示屏 ''' def __init__(self): ''' 一些初始设置 ''' super().__init__() self.initUI() def initUI(self): ''' 界面初始设置 ''' self.resize(370, 190) self.setWindowTitle('关注微信公众号:学点编程吧--倒计时:LCD数字') self.lcd = QLCDNumber(self) lb = QLabel("距离2022年北京-张家口冬季奥林匹克运动会还有", self) ft = QFont() ft.setPointSize(15) lb.setFont(ft) vbox = QVBoxLayout(self) vbox.addWidget(lb) vbox.addWidget(self.lcd) self.lcd.setDigitCount(12)# 将新建的QLCDNumber对象设置为12位 self.lcd.setMode(QLCDNumber.Dec)# 显示模式十进制(默认) self.lcd.setStyleSheet("border: 2px solid black; color: red; background: silver;") # Lcd样式设置 time = QTimer(self) time.setInterval(1000)# 固定1s发出timeout信号 time.timeout.connect(self.refresh) time.start() self.show() def refresh(self): ''' 当时间每隔1s,LCD上信息会刷新一下的。 ''' startDate = QDateTime.currentMSecsSinceEpoch() # 将其转换成当前时间到1970-01-01T00:00:00世界协调时间以来的毫秒数 endDate = QDateTime(QDate(2020, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch() # 返回2020年2月4日0:0:0自1970-01-01T00:00:00.000世界协调时间以来的毫秒数 interval = endDate - startDate # 距离冬奥会还有多少时间 if interval > 0: days = interval // (24 * 60 * 60 * 1000) hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000) min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000) sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000 intervals = str(days) + ':' + str(hour) + ':' + str(min) + ':' + str(sec) self.lcd.display(intervals)
class MY_TIME(QWidget): def __init__(self): super().__init__() self.initUI() self.init_timer() def update_time(self): # 设置时间元祖 time.localtime() 获取本地时间 self.lcd.display(time.strftime('%X', time.localtime())) def init_timer(self): self.timer = QTimer() #设置定时器,每一秒触发一次 timeout 信号 self.timer.setInterval(1000) #启动定时器 self.timer.start() self.timer.timeout.connect(self.update_time) def initUI(self): self.resize(250, 100) self.setWindowTitle('王守鹏') self.move_center() self.lcd = QLCDNumber() #设置要显示的数字个数 self.lcd.setDigitCount(10) #采用的是十进制模式 self.lcd.setMode(QLCDNumber.Dec) #设置平面模式 self.lcd.setSegmentStyle(QLCDNumber.Flat) #设置时间元祖 time.localtime() 获取本地时间 self.lcd.display(time.strftime('%X', time.localtime())) #构建一个盒子布局 self.main_layout = QVBoxLayout() #把上面的组件添加进盒子布局 self.main_layout.addWidget(self.lcd) #设置组件居中 self.main_layout.setAlignment(Qt.AlignCenter) #设置给顶层布局 self.setLayout(self.main_layout) #设置界面颜色 self.main_bg = QPalette() #设置颜色为蓝色 self.main_bg.setColor(QPalette.Background, Qt.darkGreen) #设置自动填充背景颜色 self.setAutoFillBackground(True) #把颜色设置给顶级窗口 self.setPalette(self.main_bg) def move_center(self): #设置矩形 m_rect = self.frameGeometry() #获取这个屏幕的中心点 w_center_point = QDesktopWidget().availableGeometry().center() m_rect.moveCenter(w_center_point) #从左上角开始移动,直到中间 self.move(m_rect.topLeft()) self.show()
class MyTime(QWidget): def __init__(self): super().__init__() self.initUI() self.init_timer() #规定槽函数 更新时间 def update_time(self): #获取本地时间 显示到窗口 self.lcd.display(time.strftime('%X',time.localtime())) #实现定时器 信号 和槽函数 def init_timer(self): #初始化定时器 self.timer = QTimer() #设置触发信号,1000毫秒 self.timer.setInterval(1000) #启动定时器 self.timer.start() #信号触发 self.timer.timeout.connect(self.update_time) #实现界面所有编写 实例方法 this def initUI(self): #设置组件大小 宽高251px * 150px self.resize(251,150) #设置窗口标题 self.setWindowTitle('构建创意时钟') #设置窗口LOGO self.setWindowIcon(QIcon('C:/Users/19845/Desktop/a.jpg')) #初始化 调色板 self.plt = QPalette() #设置背景颜色 深青色 self.plt.setColor(QPalette.Background,Qt.darkCyan) #设置当前窗体自动填充渲染背景颜色 self.setAutoFillBackground(True) #设置顶层布局 self.setPalette(self.plt) #初始化 LCD数字组件 self.lcd = QLCDNumber() #设置显示数字个数 self.lcd.setDigitCount(10) #设置显示样式的模式,为平面模式 self.lcd.setSegmentStyle(QLCDNumber.Flat) #设置显示模式,为10进制 self.lcd.setMode(QLCDNumber.Dec) #获取本地时间,显示到窗口中 self.lcd.display(time.strftime('%X',time.localtime())) #初始化盒子布局 self.box = QVBoxLayout() #把要显示的LCD界面添加到布局中 统一管理 self.box.addWidget(self.lcd) #设置组件到窗口中间位置显示 self.box.setAlignment(Qt.AlignCenter) #将所有逻辑设置到顶层布局中 self.setLayout(self.box) #显示所有ui界面 self.show()
class Widget(QWidget): def __init__(self): super(Widget, self).__init__() self.lcd = QLCDNumber(self) self.lcd.setDigitCount(8) self.started = False self.startClicked() btn_start = QPushButton("Run", self) btn_stop = QPushButton("Stop", self) btn_start.clicked.connect(self.startClicked) btn_stop.clicked.connect(self.stopClicked) lbl1 = QLabel('MBps', self) lbl1.setFont(QFont('SansSerif', 20)) hbox = QHBoxLayout() hbox.addWidget(self.lcd) hbox.addWidget(lbl1) hbox2 = QHBoxLayout() hbox2.addWidget(btn_start) hbox2.addWidget(btn_stop) vbox = QVBoxLayout() vbox.addLayout(hbox) vbox.addLayout(hbox2) self.setLayout(vbox) self.setGeometry(300, 300, 450, 250) self.show() def startClicked(self): #self.crono = Crono(self) #self.crono.start() #Connect signal of self.crono to a slot of self.progressBar #self.crono.tick.connect(self.prgBar.setValue) #self.crono.tick.connect(self.lcd.display) if (not self.started): self.net = Net(self) self.net.start() self.net.perf_data.connect(self.lcd.display) self.started = True #self.net = Net(self) #self.net.start() def stopClicked(self): self.net.stop_flag = True self.net.quit() self.net.wait() self.started = False
class MyTime(QWidget): # 构造方法 def __init__(self): # self代表当前实例对象的本身 ps:不是类本身 super().__init__() self.initUI() self.init_timer() def update_time(self): # 获取当前的系统时间 self.lcd.display(time.strftime('%X',time.localtime())) def init_timer(self): # 定时器 self.timer = QTimer() # 间隔0.5s发送一次信号 self.timer.setInterval(500) # 启动定时器 self.timer.start() # 信号 和 槽函数 self.timer.timeout.connect(self.update_time) def initUI(self): # 窗口组件的大小 251px * 150 self.resize(251,150) # 窗口组件的名称 self.setWindowTitle('不完美时钟') # 设置窗口图标 self.setWindowIcon(QIcon('微信图片_20180706210835.jpg')) # 颜色调色板 self.pa = QPalette() # 设置背景颜色为深黄色 self.pa.setColor(QPalette.Background,Qt.darkCyan) self.setAutoFillBackground(True) self.setPalette(self.pa) self.lcd = QLCDNumber() # 设置数字的个数为10个 self.lcd.setDigitCount(10) # 设置显示的数字模式为10进制 self.lcd.setMode(QLCDNumber.Dec) # 设置展示的模式为水平 self.lcd.setSegmentStyle(QLCDNumber.Flat) # 获取当前的系统时间 self.lcd.display(time.strftime('%X',time.localtime())) # 初始化一个盒子布局 self.main_layout = QVBoxLayout() # 把时间添加到布局中 self.main_layout.addWidget(self.lcd) # 设置组件到布局的中间 self.main_layout.setAlignment(Qt.AlignCenter) # 将子布局 设置到 顶层布局 self.setLayout(self.main_layout) # 显示布局 self.show()
class CountDownWidget(QWidget): def __init__(self, parent=None): # コンストラクタ QWidget.__init__(self, parent=parent) self.interval = 10 self.setup_ui() def setup_ui(self): self.setAutoFillBackground(True) p = self.palette() p.setColor(self.backgroundRole(), QtCore.Qt.white) self.setPalette(p) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.timer = QtCore.QTimer(parent=self) self.timer.setInterval(self.interval) self.timer.timeout.connect(self.do_countdown) self.lcd_number = QLCDNumber(parent=self) self.lcd_number.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.lcd_number.setFrameStyle(QFrame.NoFrame) self.lcd_number.setSegmentStyle(QLCDNumber.Flat) self.lcd_number.setDigitCount(6) layout = QVBoxLayout() layout.addWidget(self.lcd_number) self.setLayout(layout) self.reset_count() def update_display(self): self.lcd_number.display("%6.2f" % (self.count / 100)) self.lcd_number.update() def do_countdown(self): self.count -= 1 self.update_display() if self.count <= 0: self.stop_countdown() def start_countdown(self): if self.count > 0: self.timer.start() def stop_countdown(self): self.timer.stop() def reset_count(self): self.count = 18000 self.update_display()
class Main(QWidget): def __init__(self): super(Main, self).__init__() self.initUI() def initUI(self): timer = QTimer(self) timer.timeout.connect(self.Time) timer.start(10) self.lcd = QLCDNumber(self) self.lcd.resize(250, 100) self.lcd.move(0, 30) self.lcd.display(strftime('%H' + ':' + '%M')) self.r1 = QRadioButton('Hide seconds', self) self.r1.move(10, 0) self.r2 = QRadioButton('Show seconds', self) self.r2.move(110, 0) self.r1.toggled.connect(self.woSecs) self.r2.toggled.connect(self.wSecs) self.setGeometry(300, 300, 250, 130) self.setWindowTitle('Clock') self.setWindowIcon(QIcon('')) self.show() def Time(self): global var if var == True: self.lcd.display(strftime('%H' + ':' + '%M')) elif var == False: self.lcd.display(strftime('%H' + ':' + '%M' + ':' + '%S')) def wSecs(self): global var var = False self.resize(375, 130) self.lcd.resize(375, 100) self.lcd.setDigitCount(8) def woSecs(self): global var var = True self.resize(250, 130) self.lcd.resize(250, 100) self.lcd.setDigitCount(5)
class MyTimer(QWidget): def __init__(self, call_backs): super().__init__() self.seconds = 0 self.minutes = 0 self.call_backs = call_backs self.initUI() def initUI(self): self.lcd = QLCDNumber(self) self.timer = QTimer(self) self.timer.timeout.connect(self.Time) self.start = QPushButton("Start", self) self.start.clicked.connect(self.Start) self.stop = QPushButton("Stop", self) self.stop.clicked.connect(lambda: self.timer.stop()) self.reset = QPushButton("Reset", self) self.reset.clicked.connect(self.Reset) grid = QGridLayout() grid.addWidget(self.start, 1, 0) grid.addWidget(self.stop, 1, 1) grid.addWidget(self.reset, 1, 2) grid.addWidget(self.lcd, 2, 0) self.setLayout(grid) def Reset(self): self.timer.stop() self.seconds, self.minutes = 0, 0 time = "{0}:{1}".format(self.minutes, self.seconds) self.lcd.setDigitCount(len(time)) self.lcd.display(time) def Start(self): self.call_backs['start_game']() self.timer.start(1000) def Time(self): if self.seconds < 59: self.seconds += 1 else: self.seconds = 0 self.minutes += 1 time = "{0}:{1}".format(self.minutes, self.seconds) self.lcd.setDigitCount(len(time)) self.lcd.display(time)
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(370, 190) self.setWindowTitle('关注微信公众号:学点编程吧--倒计时:LCD数字') self.lcd = QLCDNumber(self) lb = QLabel("距离2022年北京-张家口冬季奥林匹克运动会还有", self) ft = QFont() ft.setPointSize(15) lb.setFont(ft) vbox = QVBoxLayout(self) vbox.addWidget(lb) vbox.addWidget(self.lcd) self.lcd.setDigitCount(12) self.lcd.setMode( QLCDNumber.Dec) # etMode()该属性保存当前的显示模式(数字库),对应于当前显示模式, self.lcd.setStyleSheet( "border: 2px solid black; color: blue; background: silver; border-radius:10px;border-width:3px;" ) time = QTimer(self) time.setInterval(1000) # 1000毫秒=1秒 time.timeout.connect(self.refresh) # 以固定时间1秒,向refresh槽发出信号 time.start() self.show() def refresh(self): startDate = QDateTime.currentMSecsSinceEpoch() endDate = QDateTime( QDate(2020, 2, 4), QTime(0, 0, 0) ).toMSecsSinceEpoch( ) # 假设是0:0:0开始的,我们创建一个QDatetime对象,并使用toMSecsSinceEpoch()返回2020年2月4日0:0:0自1970-01-01T00:00:00.000世界协调时间以来的毫秒数。 interval = endDate - startDate if interval > 0: days = interval // (24 * 60 * 60 * 1000) hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000) min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000) sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000 intervals = str(days) + ':' + str(hour) + ':' + str( min) + ':' + str(sec) self.lcd.display(intervals)
class CountDownWidget(QWidget): ''' classdocs ''' def __init__(self, parent=None): ''' Constructor ''' QWidget.__init__(self, parent=parent) self.interval = 10 self.setup_ui() ''' 実際の初期化関数 ''' def setup_ui(self): self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.timer = QTimer(parent=self) self.timer.setInterval(self.interval) self.timer.timeout.connect(self.do_countdown) self.lcd_number = QLCDNumber(parent=self) self.lcd_number.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.lcd_number.setFrameStyle(QFrame.NoFrame) self.lcd_number.setSegmentStyle(QLCDNumber.Flat) self.lcd_number.setDigitCount(6) layout = QVBoxLayout() layout.addWidget(self.lcd_number) self.setLayout(layout) self.reset_count() def update_display(self): self.lcd_number.display("%6.2f" % (self.count / 100)) self.lcd_number.update() def do_countdown(self): self.count -= 1 self.update_display() if self.count <= 0: self.stopcountdown() def start_countdown(self): if self.count > 0: self.timer.start() def stop_countdown(self): self.timer.stop() def reset_count(self): self.count = 18000 self.update_display()
class TimeCounter(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.timer = QTimer() self.timer.timeout.connect(self.countTime) self.initUI() def initUI(self): self.minutes = 0 self.miliseconds = 0 self.seconds = 0 self.lcd = QLCDNumber() self.lcd.setDigitCount(12) self.lcd.display( str(self.minutes) + ' : ' + str(self.seconds) + ' : ' + str(self.miliseconds)) layout = QHBoxLayout(self) layout.addWidget(self.lcd) def countTime(self): self.miliseconds = self.miliseconds + 1 if self.miliseconds >= 100: self.miliseconds = 0 self.seconds = self.seconds + 1 if self.seconds >= 60: self.seconds = 0 self.minutes = self.minutes + 1 self.lcd.display("{0}".format(str(self.minutes)) + ' : ' + str(self.seconds) + ' : ' + str(self.miliseconds)) def start(self): if self.miliseconds != 0: self.miliseconds = 0 if self.seconds != 0: self.seconds = 0 if self.minutes != 0: self.minutes = 0 self.timer.start(10) def stop(self): self.timer.stop()
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(370, 190) self.setWindowTitle('LCD数字') self.lcd = QLCDNumber(self) lb = QLabel("距离2022年北京-张家口冬季奥林匹克运动会还有", self) ft = QFont() ft.setPointSize(15) lb.setFont(ft) vbox = QVBoxLayout(self) vbox.addWidget(lb) vbox.addWidget(self.lcd) self.lcd.setDigitCount(13) self.lcd.setMode(QLCDNumber.Dec) self.lcd.setStyleSheet( "border: 2px solid black; color: red; background: silver;") time = QTimer(self) time.setInterval(1000) time.timeout.connect(self.refresh) time.start() self.show() def refresh(self): startDate = QDateTime.currentMSecsSinceEpoch() endDate = QDateTime(QDate(2022, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch() interval = endDate - startDate if interval > 0: days = interval // (24 * 60 * 60 * 1000) hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000) min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000) sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000 intervals = str(days) + ':' + str(hour) + ':' + str( min) + ':' + str(sec) self.lcd.display(intervals)
class MyTimer(QWidget): def __init__(self): super(MyTimer, self).__init__() self.lcd = QLCDNumber() self.lcd.setDigitCount(10) self.lcd.setMode(QLCDNumber.Dec) self.lcd.setSegmentStyle(QLCDNumber.Flat) layout = QVBoxLayout() layout.addWidget(self.lcd) self.setLayout(layout) self.timer = QTimer() self.timer.setInterval(1000) self.timer.start() self.timer.timeout.connect(self.onTimerOut) def onTimerOut(self): self.lcd.display(time.strftime("%X", time.localtime()))
class CountDownTimer(QLCDNumber): """ time_allocation: positive integer, indicating the allocated time for user time_value: started as time_allocation, and dynamically changed every second """ def __init__(self, time_allocation=15, parent=None): super(CountDownTimer, self).__init__(parent) self.time_allocation = time_allocation self.time_value = self.time_allocation # timer self.timer = QTimer(self) self.timer.timeout.connect(self.advance_time) # LCD time display self.lcd = QLCDNumber(self) self.lcd.setDigitCount(3) self.lcd.setSegmentStyle(QLCDNumber.Flat) self.lcd.display(self.time_value) def restart_timer(self): self.time_value = self.time_allocation self.lcd.display(self.time_value) palette = self.lcd.palette() palette.setColor(palette.WindowText, QColor(0, 0, 0)) self.lcd.setPalette(palette) self.timer.start(1000) def advance_time(self): self.time_value -= 1 # Yellow - five seconds left if self.time_value == 5: palette = self.lcd.palette() palette.setColor(palette.WindowText, QColor(255, 153, 0)) self.lcd.setPalette(palette) # Red - no time left if self.time_value == 0: palette = self.lcd.palette() palette.setColor(palette.WindowText, QColor(255, 0, 0)) self.lcd.setPalette(palette) self.lcd.display(self.time_value)
class WinForm(QWidget): def __init__(self, parent=None): super(WinForm, self).__init__(parent) self.setGeometry(300, 300, 350, 350) self.setWindowTitle('Sentiment Analysis') self.Run = QPushButton('Run', self) self.Run.setGeometry(250, 100, 80, 40) self.Run.setStyleSheet("background-color: green") self.Run.clicked.connect(self.run) self.Inf = QLabel(self) self.Inf.move(40, 40) self.Inf.resize(200, 40) self.Inf.setText('Please type in something') self.Inline = QLineEdit(self) self.Inline.move(40, 100) self.Inline.resize(200, 40) self.Outline = QLCDNumber(self) self.Outline.move(90, 170) self.Outline.resize(150, 80) self.Outline.setDigitCount(2) self.Outline.display(00) self.Run.setDisabled(True) self.Inline.textChanged.connect(self.disableRun) def disableRun(self): self.Run.setDisabled(True) for ele in self.Inline.text(): if ele != ' ': self.Run.setDisabled(False) def run(self): self.Inf.setText('Please waiting........') time.sleep(0.5) score = analyze(self.Inline.text()) self.Outline.display(score) self.Inf.setText('Please type in something')
class ShowTime(QWidget): def __init__(self, parent=None): super(ShowTime, self).__init__(parent) self.isTimeStart = False # 标记时间是否开始计时 self.lcd = QLCDNumber(self) self.lcd.setDigitCount(8) self.lcd.display("00:00:00") # 创建定时器对象和时间对象 self.timer = QTimer() # self.timeClock = QTime() # 信号与槽 # self.btn_start.clicked.connect(self.timestart) self.timer.timeout.connect(self.addtime) # self.btn_stop.clicked.connect(self.timestop) self.v_layout = QVBoxLayout() self.v_layout.addWidget(self.lcd) self.setLayout(self.v_layout) def back_to_zero(self): self.lcd.setDigitCount(8) self.lcd.display("00:00:00") def timestart(self): # 启动计时 if not self.isTimeStart: self.timeClock.setHMS(0, 0, 0) # 初始时设置时间为 00:00:00 self.timer.start(1000) # 启动定时器,定时器对象每隔一秒发射一个timeout信号 self.isTimeStart = True def addtime(self): # 计时时间增一秒,并显示在QLable上 self.timeClock = self.timeClock.addMSecs(1000) # 时间增加一秒 # self.lable_time_val.setText(self.timeClock.toString("hh:mm:ss")) # 标签显示时间 # print(self.timeClock.toString("hh:mm:ss")) self.lcd.display(self.timeClock.toString("hh:mm:ss")) # 标签显示时间 def timestop(self): # 停止计时 if self.isTimeStart: self.timer.stop() self.isTimeStart = False
class LCDDemo(QWidget): def __init__(self): super(LCDDemo, self).__init__() self.resize(600, 600) self.lcd_1 = QLCDNumber(self) self.lcd_1.setDigitCount(10) self.lcd_1.display(1234567890) self.lcd_2 = QLCDNumber(self) self.lcd_2.setSegmentStyle(QLCDNumber.Flat) self.lcd_2.setDigitCount(10) self.lcd_2.display(0.123456789) self.lcd_3 = QLCDNumber(self) self.lcd_3.setSegmentStyle(QLCDNumber.Filled) self.lcd_3.display('HELLO') self.lcd_4 = QLCDNumber(self) self.lcd_4.setSegmentStyle(QLCDNumber.Outline) self.lcd_4.setMode(QLCDNumber.Hex) self.lcd_4.setDigitCount(6) self.lcd_4.display(666) self.v_layout = QVBoxLayout() self.v_layout.addWidget(self.lcd_1) self.v_layout.addWidget(self.lcd_2) self.v_layout.addWidget(self.lcd_3) self.v_layout.addWidget(self.lcd_4) self.setLayout(self.v_layout)
class MainWindow(Ui_MainWindow, QMainWindow): """ 主界面二次设计 """ def __init__(self): super(MainWindow, self).__init__() # 获取桌面尺寸 desktop = QApplication.desktop() desk_width = desktop.screenGeometry().width() desk_height = desktop.screenGeometry().height() # 摄像头图像设置 self.frame = DIYLabel(self) self.frame.setGeometry(0, 0, desk_width, desk_height) self.setupUi(self) # 按钮定位 self.buttons = [ self.att_rec, self.face_login, self.face_rec, self.face_reg ] map( lambda x: x.move( desk_width * 0.80, desk_height * 0.33 + self.buttons.index(x) * (x.height() + 8)), self.buttons) map(lambda x: x.raise_(), self.buttons) # 设置时钟 self.clock = QLCDNumber(self) self.clock.setDigitCount(10) self.clock.setMode(QLCDNumber.Dec) self.clock.setSegmentStyle(QLCDNumber.Flat) self.clock.display(time.strftime("%X", time.localtime())) self.clock.setStyleSheet("QLCDNumber{color:rgba(255,0,0,100);}") self.clock.resize(280, 120) self.clock.move(50, desk_height - 30 - self.clock.height()) self.setWindowFlags(Qt.FramelessWindowHint) # 隐藏窗口 self.showFullScreen() # 窗体全屏
class ShiZhong(QWidget): def __init__(self): super(ShiZhong, self).__init__() self.initUI() self.init_timer() def initUI(self): self.resize(250, 150) self.setWindowTitle('电子时钟By LC') self.move_center() self.m = QPalette() self.m.setColor(QPalette.Background, Qt.green) self.setAutoFillBackground(True) self.setPalette(self.m) self.lcd = QLCDNumber() self.lcd.setDigitCount(10) self.lcd.setMode(QLCDNumber.Dec) self.lcd.setSegmentStyle(QLCDNumber.Flat) self.lcd.display(time.strftime("%X", time.localtime())) self.m_layout = QVBoxLayout() self.m_layout.addWidget(self.lcd) self.m_layout.setAlignment(Qt.AlignCenter) self.setLayout(self.m_layout) self.show() def init_timer(self): self.timer = QTimer() self.timer.setInterval(1000) self.timer.start() self.timer.timeout.connect(self.update_time) def update_time(self): self.lcd.display(time.strftime("%X", time.localtime())) def move_center(self): m_rect = self.frameGeometry() w_center_point = QDesktopWidget().availableGeometry().center() m_rect.moveCenter(w_center_point) self.move(m_rect.topLeft())
class Counter(QWidget): def __init__(self, number_of_cards): super().__init__() self.cards_left = number_of_cards self.initUI() def initUI(self): self.lcd = QLCDNumber(self) grid = QGridLayout() grid.addWidget(self.lcd, 1, 0) self.setLayout(grid) self.display() def update_counter(self, cards_played): self.cards_left -= cards_played self.display() def display(self): to_display = "{}".format(self.cards_left) self.lcd.setDigitCount(len(to_display)) self.lcd.display(to_display)
class ClockWidget(QWidget): def __init__(self): super().__init__() self.LCD = QLCDNumber() self.clockLayout = QHBoxLayout() self.timer = QTimer() self.initUI() self.setLayout(self.clockLayout) self.show() def initUI(self): self.timer.timeout.connect(self.refreshLCD) self.timer.start(1000) self.LCD.setDigitCount(8) self.LCD.display(strftime("%H:%M:%S")) self.clockLayout.addWidget(self.LCD) self.setMaximumSize(650, 100) def refreshLCD(self): self.LCD.display(strftime("%H:%M:%S"))
class parameterWidget(QWidget): def __init__(self,minimum,maximum): super(parameterWidget,self).__init__() self.container = QVBoxLayout() self.container.addStretch(1) self.slider = QSlider(Qt.Horizontal, self) self.slider.setMinimum(minimum) self.slider.setMaximum(maximum) self.slider.setTickInterval(1) self.slider.setSingleStep(1) self.container.addWidget(self.slider) self.lcd = QLCDNumber() self.lcd.setFixedHeight(100) self.lcd.setFixedWidth(100) self.lcd.resize(50, 100) self.container.addWidget(self.lcd) self.lcd.setDigitCount(8) self.slider.valueChanged.connect(self.update_lcd) self.container.addStretch(1) self.setLayout(self.container) @pyqtSlot(int) def update_lcd(self,value): self.lcd.display(str(value))
class Demo(QWidget): def __init__(self): super(Demo, self).__init__() self.resize(600, 600) # 实例化一个QLCDNumber控件, # 然后通过setDiditCount()方法来设置一共可以显示多少为数字; self.lcd_1 = QLCDNumber(self) self.lcd_1.setDigitCount(10) self.lcd_1.display(1234567890) # lcd_2显示浮点型数字 self.lcd_2 = QLCDNumber(self) # 通过setSegmentStyle()可以设置显示屏数字样式 """ 常量 值 描述 QLCDNumber.Outline 0 让内容浮显,其颜色显示屏背景颜色相同 QLCDNumber.Filled 1 让内容浮显,颜色窗口标题相同 QLCDNumber.Flat 2 让内容扁平化显示,颜色同窗口标题颜色相同 """ self.lcd_2.setSegmentStyle(QLCDNumber.Flat) # setSmallDecimalPoint(bool)方法可以设置小数点的显示方式: # 若为True,那么小数点就会在两个数字之间显示出来,而不会单独占一个位置。如果为False,那就会单独占位(默认为False)。 # self.lcd_2.setSmallDecimalPoint(True) self.lcd_2.setDigitCount(10) self.lcd_2.display(0.123456789) # 3. lcd_3显示的为字符串,可以显示的字母种类有限:A, B, C, D, E, F, h, H, L, # o, P, r, u, U, Y, O/0, S/5, g/9; self.lcd_3 = QLCDNumber(self) # 3 self.lcd_3.setSegmentStyle(QLCDNumber.Filled) self.lcd_3.display('HELLO') self.lcd_4 = QLCDNumber(self) # 4 self.lcd_4.setSegmentStyle(QLCDNumber.Outline) self.lcd_4.setMode(QLCDNumber.Hex) self.lcd_4.setDigitCount(6) self.lcd_4.display(666) self.v_layout = QVBoxLayout() self.v_layout.addWidget(self.lcd_1) self.v_layout.addWidget(self.lcd_2) self.v_layout.addWidget(self.lcd_3) self.v_layout.addWidget(self.lcd_4) self.setLayout(self.v_layout)
class PlayingMediaWidget(QWidget): def __init__(self, cue, media_time, parent=None): super().__init__(parent) self.cue = cue self.media_time = media_time self._dbmeter_element = None self._accurate_time = False scroll_size = (self.parent().verticalScrollBar().width() + 5) self.setGeometry(0, 0, self.parent().width() - scroll_size, 102) self.setFocusPolicy(Qt.NoFocus) self.gridLayoutWidget = QWidget(self) self.gridLayoutWidget.setGeometry(self.geometry()) self.gridLayout = QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(2, 2, 2, 2) self.nameLabel = QLabel(self.gridLayoutWidget) self.nameLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.nameLabel.setText(cue['name']) self.nameLabel.setToolTip(cue['name']) self.gridLayout.addWidget(self.nameLabel, 0, 0, 1, 3) self.playPauseButton = QPushButton(self.gridLayoutWidget) self.playPauseButton.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.playPauseButton.setIcon(QIcon.fromTheme("media-playback-pause")) self.playPauseButton.setFocusPolicy(Qt.NoFocus) self.playPauseButton.clicked.connect(lambda: self.cue.media.pause()) self.gridLayout.addWidget(self.playPauseButton, 1, 0) self.stopButton = QPushButton(self.gridLayoutWidget) self.stopButton.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.stopButton.setIcon(QIcon.fromTheme("media-playback-stop")) self.stopButton.setFocusPolicy(Qt.NoFocus) self.stopButton.clicked.connect(lambda m: cue.media.stop()) self.gridLayout.addWidget(self.stopButton, 1, 1) self.timeDisplay = QLCDNumber(self.gridLayoutWidget) self.timeDisplay.setSegmentStyle(QLCDNumber.Flat) self.timeDisplay.setDigitCount(8) self.timeDisplay.display(strtime(cue.media['duration'])) self.gridLayout.addWidget(self.timeDisplay, 1, 2) self.seekSlider = QClickSlider(self.gridLayoutWidget) self.seekSlider.setOrientation(Qt.Horizontal) self.seekSlider.setRange(0, cue.media['duration']) self.seekSlider.setFocusPolicy(Qt.NoFocus) self.seekSlider.sliderMoved.connect(cue.media.seek) self.seekSlider.sliderJumped.connect(cue.media.seek) self.seekSlider.setVisible(False) self.dbmeter = QDbMeter(self.gridLayoutWidget) self.dbmeter.setVisible(False) self.gridLayout.setRowStretch(0, 1) self.gridLayout.setRowStretch(1, 2) self.gridLayout.setColumnStretch(0, 3) self.gridLayout.setColumnStretch(1, 3) self.gridLayout.setColumnStretch(2, 5) self.media_time.notify.connect(self.on_time_updated) cue.updated.connect(self.on_cue_updated) cue.media.duration.connect(self.update_duration) cue.media.played.connect(self._pause_to_play) cue.media.paused.connect(self._play_to_pause) self.fade = self.cue.media.element("Fade") if self.fade is not None: self.fade.enter_fadein.connect(self.enter_fadein) self.fade.enter_fadeout.connect(self.enter_fadeout) self.fade.exit_fadein.connect(self.exit_fade) self.fade.exit_fadeout.connect(self.exit_fade) def enter_fadeout(self): p = self.timeDisplay.palette() p.setColor(p.Text, QColor(255, 50, 50)) self.timeDisplay.setPalette(p) def enter_fadein(self): p = self.timeDisplay.palette() p.setColor(p.Text, QColor(0, 255, 0)) self.timeDisplay.setPalette(p) def exit_fade(self): self.timeDisplay.setPalette(self.palette()) def on_cue_updated(self, cue): self.nameLabel.setText(cue['name']) self.nameLabel.setToolTip(cue['name']) def set_accurate_time(self, enable): self._accurate_time = enable def set_seek_visible(self, visible): if visible and not self.seekSlider.isVisible(): self.gridLayout.addWidget(self.seekSlider, 2, 0, 1, 3) self.gridLayout.setRowStretch(2, 1) elif not visible and self.seekSlider.isVisible(): self.gridLayout.removeWidget(self.seekSlider) self.gridLayout.setRowStretch(2, 0) self.seekSlider.setVisible(visible) def set_dbmeter_visible(self, visible): if self._dbmeter_element is not None: self._dbmeter_element.levelReady.disconnect(self.dbmeter.plot) self._dbmeter_element = None if visible: self._dbmeter_element = self.cue.media.element("DbMeter") if self._dbmeter_element is not None: self._dbmeter_element.levelReady.connect(self.dbmeter.plot) # Add/Remove the QDbMeter in the layout if visible and not self.dbmeter.isVisible(): self.gridLayout.addWidget(self.dbmeter, 0, 3, 4, 1) self.gridLayout.setColumnStretch(3, 1) elif not visible and self.dbmeter.isVisible(): self.gridLayout.removeWidget(self.dbmeter) self.gridLayout.setColumnStretch(3, 0) self.dbmeter.setVisible(visible) def on_time_updated(self, time): if not self.visibleRegion().isEmpty(): # If the given value is the duration or < 0 set the time to 0 if time == self.cue.media['duration'] or time < 0: time = 0 # Set the value the seek slider self.seekSlider.setValue(time) # If in count-down mode the widget will show the remaining time time = self.cue.media['duration'] - time # Show the time in the widget self.timeDisplay.display(strtime(time, accurate=self._accurate_time)) def update_duration(self, media, duration): self.seekSlider.setMaximum(duration) def _play_to_pause(self): self.playPauseButton.clicked.disconnect() self.playPauseButton.clicked.connect(lambda: self.cue.media.play()) self.playPauseButton.setIcon(QIcon.fromTheme("media-playback-start")) def _pause_to_play(self): self.playPauseButton.clicked.disconnect() self.playPauseButton.clicked.connect(lambda: self.cue.media.pause()) self.playPauseButton.setIcon(QIcon.fromTheme("media-playback-pause")) def destroy_widget(self): self.hide() self.set_dbmeter_visible(False) self.media_time.notify.disconnect(self.on_time_updated) if self.fade is not None: self.fade.enter_fadein.disconnect(self.enter_fadein) self.fade.enter_fadeout.disconnect(self.enter_fadeout) self.fade.exit_fadein.disconnect(self.exit_fade) self.fade.exit_fadeout.disconnect(self.exit_fade) self.cue.media.duration.disconnect(self.update_duration) self.cue.updated.disconnect(self.on_cue_updated)
class Ten(QWidget): def __init__(self, parent=None): super().__init__(parent) self._START = '&START' self._STOP = 'S&TOP' self._RESET = '&RESET' self._FORMAT = 'hh:mm:ss.zzz' self._widgets() self._layout() self._properties() self._connections() def _widgets(self): self.shiverTimer = QTime(0, 0, 0) self.timer = QTimer() self.timerLCDNumber = QLCDNumber() self.timerLCDNumber.setDigitCount(12) self.timerLCDNumber.display("00:00:00.000") self.stortPushButton = QPushButton(self._START) self.resetPushButton = QPushButton(self._RESET) def _layout(self): grid = QGridLayout() grid.addWidget(self.timerLCDNumber, 0, 0, 1, 2) grid.addWidget(self.stortPushButton, 1, 0) grid.addWidget(self.resetPushButton, 1, 1) self.setLayout(grid) def _properties(self): self.resize(350, 125) self.setWindowTitle('{} {}'.format(__title__, __version__)) self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint) def _connections(self): self.timer.timeout.connect(self.showStopwatch) self.stortPushButton.clicked.connect(self.on_stortPushButton_clicked) self.resetPushButton.clicked.connect(self.on_resetPushButton_clicked) def showStopwatch(self): """ Event handler for showing elapsed time, just like a stopwatch """ self.shiverTimer = self.shiverTimer.addMSecs(1) text = self.shiverTimer.toString(self._FORMAT) self.timerLCDNumber.display(text) def on_stortPushButton_clicked(self): if self.stortPushButton.text() == self._START: self.timer.start(1) # Start the timer self.stortPushButton.setText(self._STOP) else: self.timer.stop() # Stop the timer self.stortPushButton.setText(self._START) def on_resetPushButton_clicked(self): self.timer.stop() self.shiverTimer = QTime(0, 0, 0) self.timerLCDNumber.display(self.shiverTimer.toString(self._FORMAT)) if self.stortPushButton.text() == self._STOP: self.stortPushButton.setText(self._START)
class CueWidget(QWidget): STOP = QIcon.fromTheme('led-off') START = QIcon.fromTheme('led-running') PAUSE = QIcon.fromTheme('led-pause') ERROR = QIcon.fromTheme('led-error') ICON_SIZE = 14 context_menu_request = pyqtSignal(object, QPoint) edit_request = pyqtSignal(object) cue_executed = pyqtSignal(object) def __init__(self, cue, **kwargs): super().__init__(**kwargs) self.cue = None self._selected = False self._accurate_timing = False self._show_dbmeter = False self._countdown_mode = True self._dbmeter_element = None self._fade_element = None self.setAttribute(Qt.WA_TranslucentBackground) self.setLayout(QGridLayout()) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().setSpacing(2) self.layout().setColumnStretch(0, 6) self.layout().setRowStretch(0, 4) self.nameButton = QClickLabel(self) self.nameButton.setObjectName('ButtonCueWidget') self.nameButton.setWordWrap(True) self.nameButton.setAlignment(Qt.AlignCenter) self.nameButton.setFocusPolicy(Qt.NoFocus) self.nameButton.clicked.connect(self._clicked) self.nameButton.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.layout().addWidget(self.nameButton, 0, 0) self.statusIcon = QLabel(self.nameButton) self.statusIcon.setStyleSheet('background-color: transparent') self.statusIcon.setPixmap(CueWidget.STOP.pixmap(CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)) self.seekSlider = QClickSlider(self.nameButton) self.seekSlider.setOrientation(Qt.Horizontal) self.seekSlider.setFocusPolicy(Qt.NoFocus) self.seekSlider.setVisible(False) self.dbMeter = QDbMeter(self) self.dbMeter.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.dbMeter.setVisible(False) self.timeBar = QProgressBar(self) self.timeBar.setTextVisible(False) self.timeBar.setLayout(QHBoxLayout()) self.timeBar.layout().setContentsMargins(0, 0, 0, 0) self.timeDisplay = QLCDNumber(self.timeBar) self.timeDisplay.setStyleSheet('background-color: transparent') self.timeDisplay.setSegmentStyle(QLCDNumber.Flat) self.timeDisplay.setDigitCount(8) self.timeDisplay.display('00:00:00') self.timeBar.layout().addWidget(self.timeDisplay) self.timeBar.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.timeBar.setVisible(False) self._set_cue(cue) @property def selected(self): return self._selected @selected.setter def selected(self, value): self._selected = value self._update_style(self.cue.stylesheet) def contextMenuEvent(self, event): self.context_menu_request.emit(self, event.globalPos()) def mouseMoveEvent(self, event): if (event.buttons() == Qt.LeftButton and (event.modifiers() == Qt.ControlModifier or event.modifiers() == Qt.ShiftModifier)): mime_data = QMimeData() mime_data.setText(PageWidget.DRAG_MAGIC) drag = QDrag(self) drag.setMimeData(mime_data) drag.setPixmap(self.grab(self.rect())) if event.modifiers() == Qt.ControlModifier: drag.exec_(Qt.MoveAction) else: drag.exec_(Qt.CopyAction) event.accept() else: event.ignore() def set_countdown_mode(self, mode): self._countdown_mode = mode self._update_time(self.cue.current_time()) def set_accurate_timing(self, enable): self._accurate_timing = enable if self.cue.state == CueState.Pause: self._update_time(self.cue.current_time(), True) elif self.cue.state != CueState.Running: self._update_duration(self.cue.duration) def show_seek_slider(self, visible): self.seekSlider.setVisible(visible) self.update() def show_dbmeters(self, visible): if isinstance(self.cue, MediaCue): self._show_dbmeter = visible if self._dbmeter_element is not None: self._dbmeter_element.level_ready.disconnect(self.dbMeter.plot) self._dbmeter_element = None if visible: self._dbmeter_element = self.cue.media.element('DbMeter') if self._dbmeter_element is not None: self._dbmeter_element.level_ready.connect(self.dbMeter.plot) self.layout().addWidget(self.dbMeter, 0, 1) self.layout().setColumnStretch(1, 1) self.dbMeter.show() else: self.dbMeter.hide() self.layout().setColumnStretch(1, 0) self.update() def _set_cue(self, cue): self.cue = cue self.cue.changed('name').connect(self._update_name, Connection.QtQueued) self.cue.changed('stylesheet').connect(self._update_style, Connection.QtQueued) self.cue.changed('duration').connect(self._update_duration, Connection.QtQueued) self.cue.changed('description').connect(self._update_description, Connection.QtQueued) if isinstance(cue, MediaCue): self.cue.media.changed('pipe').connect(self._media_updated) self.cue.paused.connect(self.dbMeter.reset, Connection.QtQueued) self.cue.stopped.connect(self.dbMeter.reset, Connection.QtQueued) self.cue.end.connect(self.dbMeter.reset, Connection.QtQueued) self.cue.error.connect(self.dbMeter.reset, Connection.QtQueued) self.seekSlider.sliderMoved.connect(self.cue.media.seek) self.seekSlider.sliderJumped.connect(self.cue.media.seek) # Cue status changed self.cue.started.connect(self._status_playing, Connection.QtQueued) self.cue.stopped.connect(self._status_stopped, Connection.QtQueued) self.cue.paused.connect(self._status_paused, Connection.QtQueued) self.cue.error.connect(self._status_error, Connection.QtQueued) self.cue.end.connect(self._status_stopped, Connection.QtQueued) self._cue_time = CueTime(self.cue) self._cue_time.notify.connect(self._update_time) self._update_name(cue.name) self._update_style(cue.stylesheet) self._update_duration(self.cue.duration) def _media_updated(self): self.show_dbmeters(self._show_dbmeter) new_fade = self.cue.media.element('Fade') if new_fade is not self._fade_element: if self._fade_element is not None: self._fade_element.enter_fadein.disconnect(self._enter_fadein) self._fade_element.enter_fadeout.disconnect(self._enter_fadeout) self._fade_element.exit_fadein.disconnect(self._exit_fade) self._fade_element.exit_fadeout.disconnect(self._exit_fade) if new_fade is not None: self._fade_element = new_fade self._fade_element.enter_fadein.connect(self._enter_fadein) self._fade_element.enter_fadeout.connect(self._enter_fadeout) self._fade_element.exit_fadein.connect(self._exit_fade) self._fade_element.exit_fadeout.connect(self._exit_fade) def _update_name(self, name): self.nameButton.setText(name) def _update_description(self, description): self.nameButton.setToolTip(description) def _clicked(self, event): if not self.seekSlider.geometry().contains(event.pos()): if event.button() != Qt.RightButton: if event.modifiers() == Qt.ShiftModifier: self.edit_request.emit(self.cue) elif event.modifiers() == Qt.ControlModifier: self.selected = not self.selected else: self.cue_executed.emit(self.cue) self.cue.execute() def _update_style(self, stylesheet): stylesheet += 'text-decoration: underline;' if self.selected else '' self.nameButton.setStyleSheet(stylesheet) def _enter_fadein(self): p = self.timeDisplay.palette() p.setColor(p.WindowText, QColor(0, 255, 0)) self.timeDisplay.setPalette(p) def _enter_fadeout(self): p = self.timeDisplay.palette() p.setColor(p.WindowText, QColor(255, 50, 50)) self.timeDisplay.setPalette(p) def _exit_fade(self): self.timeDisplay.setPalette(self.timeBar.palette()) def _status_stopped(self): self.statusIcon.setPixmap(CueWidget.STOP.pixmap(CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)) self._update_time(0, True) def _status_playing(self): self.statusIcon.setPixmap(CueWidget.START.pixmap(CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)) def _status_paused(self): self.statusIcon.setPixmap(CueWidget.PAUSE.pixmap(CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)) def _status_error(self, cue, error, details): self.statusIcon.setPixmap(CueWidget.ERROR.pixmap(CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)) QDetailedMessageBox.dcritical(self.cue.name, error, details) def _update_duration(self, duration): # Update the maximum values of seek-slider and time progress-bar if duration > 0: if not self.timeBar.isVisible(): self.layout().addWidget(self.timeBar, 1, 0, 1, 2) self.layout().setRowStretch(1, 1) self.timeBar.show() self.timeBar.setMaximum(duration) self.seekSlider.setMaximum(duration) else: self.timeBar.hide() self.layout().setRowStretch(1, 0) # If not in playing or paused update the widget showed time if self.cue.state != CueState.Running or self.cue.state != CueState.Running: self._update_time(duration, True) def _update_time(self, time, ignore_visibility=False): if ignore_visibility or not self.visibleRegion().isEmpty(): # If the given value is the duration or < 0 set the time to 0 if time == self.cue.duration or time < 0: time = 0 # Set the value the seek slider self.seekSlider.setValue(time) # If in count-down mode the widget will show the remaining time if self._countdown_mode: time = self.cue.duration - time # Set the value of the timer progress-bar if self.cue.duration > 0: self.timeBar.setValue(time) # Show the time in the widget self.timeDisplay.display(strtime(time, accurate=self._accurate_timing)) def resizeEvent(self, event): self.update() def update(self): super().update() self.layout().activate() xdim = self.nameButton.width() ydim = self.nameButton.height() / 5 ypos = self.nameButton.height() - ydim self.seekSlider.setGeometry(0, ypos, xdim, ydim) self.statusIcon.setGeometry(4, 4, CueWidget.ICON_SIZE, CueWidget.ICON_SIZE)
class PlayingMediaWidget(QWidget): def __init__(self, cue, **kwargs): super().__init__(**kwargs) self.cue = cue self.cue_time = CueTime(cue) self.cue_time.notify.connect(self._time_updated, Connection.QtQueued) self._dbmeter_element = None self._accurate_time = False scroll_size = (self.parent().verticalScrollBar().width() + 5) self.setGeometry(0, 0, self.parent().width() - scroll_size, 102) self.setFocusPolicy(Qt.NoFocus) self.gridLayoutWidget = QWidget(self) self.gridLayoutWidget.setGeometry(self.geometry()) self.gridLayout = QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(2, 2, 2, 2) self.nameLabel = QLabel(self.gridLayoutWidget) self.nameLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.nameLabel.setText(cue.name) self.nameLabel.setToolTip(cue.name) self.gridLayout.addWidget(self.nameLabel, 0, 0, 1, 3) self.playPauseButton = QPushButton(self.gridLayoutWidget) self.playPauseButton.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.playPauseButton.setIcon(QIcon.fromTheme('media-playback-pause')) self.playPauseButton.setIconSize(QSize(24, 24)) self.playPauseButton.setFocusPolicy(Qt.NoFocus) self.playPauseButton.clicked.connect(self._pause) self.gridLayout.addWidget(self.playPauseButton, 1, 0) self.stopButton = QPushButton(self.gridLayoutWidget) self.stopButton.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.stopButton.setIcon(QIcon.fromTheme('media-playback-stop')) self.stopButton.setIconSize(QSize(24, 24)) self.stopButton.setFocusPolicy(Qt.NoFocus) self.stopButton.clicked.connect(self._stop) self.gridLayout.addWidget(self.stopButton, 1, 1) self.timeDisplay = QLCDNumber(self.gridLayoutWidget) self.timeDisplay.setStyleSheet('background-color: transparent') self.timeDisplay.setSegmentStyle(QLCDNumber.Flat) self.timeDisplay.setDigitCount(8) self.timeDisplay.display(strtime(cue.media.duration)) self.gridLayout.addWidget(self.timeDisplay, 1, 2) self.seekSlider = QClickSlider(self.gridLayoutWidget) self.seekSlider.setOrientation(Qt.Horizontal) self.seekSlider.setRange(0, cue.media.duration) self.seekSlider.setFocusPolicy(Qt.NoFocus) self.seekSlider.sliderMoved.connect(self._seek) self.seekSlider.sliderJumped.connect(self._seek) self.seekSlider.setVisible(False) self.dbmeter = QDbMeter(self.gridLayoutWidget) self.dbmeter.setVisible(False) self.gridLayout.setRowStretch(0, 1) self.gridLayout.setRowStretch(1, 2) self.gridLayout.setColumnStretch(0, 3) self.gridLayout.setColumnStretch(1, 3) self.gridLayout.setColumnStretch(2, 5) cue.changed('name').connect(self.name_changed) cue.media.changed('duration').connect(self.update_duration) cue.media.played.connect(self._pause_to_play) cue.media.paused.connect(self._play_to_pause) self.fade = self.cue.media.element('Fade') if self.fade is not None: self.fade.enter_fadein.connect(self.enter_fadein) self.fade.enter_fadeout.connect(self.enter_fadeout) self.fade.exit_fadein.connect(self.exit_fade) self.fade.exit_fadeout.connect(self.exit_fade) def enter_fadeout(self): p = self.timeDisplay.palette() p.setColor(p.Text, QColor(255, 50, 50)) self.timeDisplay.setPalette(p) def enter_fadein(self): p = self.timeDisplay.palette() p.setColor(p.Text, QColor(0, 255, 0)) self.timeDisplay.setPalette(p) def exit_fade(self): self.timeDisplay.setPalette(self.palette()) def name_changed(self, name): self.nameLabel.setText(name) self.nameLabel.setToolTip(name) def set_accurate_time(self, enable): self._accurate_time = enable def set_seek_visible(self, visible): if visible and not self.seekSlider.isVisible(): self.gridLayout.addWidget(self.seekSlider, 2, 0, 1, 3) self.gridLayout.setRowStretch(2, 1) elif not visible and self.seekSlider.isVisible(): self.gridLayout.removeWidget(self.seekSlider) self.gridLayout.setRowStretch(2, 0) self.seekSlider.setVisible(visible) def set_dbmeter_visible(self, visible): if self._dbmeter_element is not None: self._dbmeter_element.level_ready.disconnect(self.dbmeter.plot) self._dbmeter_element = None if visible: self._dbmeter_element = self.cue.media.element('DbMeter') if self._dbmeter_element is not None: self._dbmeter_element.level_ready.connect(self.dbmeter.plot) # Add/Remove the QDbMeter in the layout if visible and not self.dbmeter.isVisible(): self.gridLayout.addWidget(self.dbmeter, 0, 3, 4, 1) self.gridLayout.setColumnStretch(3, 1) elif not visible and self.dbmeter.isVisible(): self.gridLayout.removeWidget(self.dbmeter) self.gridLayout.setColumnStretch(3, 0) self.dbmeter.setVisible(visible) def _time_updated(self, time): if not self.visibleRegion().isEmpty(): # If the given value is the duration or < 0 set the time to 0 if time == self.cue.media.duration or time < 0: time = 0 # Set the value the seek slider self.seekSlider.setValue(time) # Show the time in the widget self.timeDisplay.display(strtime(self.cue.media.duration - time, accurate=self._accurate_time)) def update_duration(self, media, duration): self.seekSlider.setMaximum(duration) def _stop(self, *args): self.cue.stop() def _play(self, *args): self.cue.start() def _pause(self, *args): self.cue.pause() def _seek(self, position): self.cue.media.seek(position) def _play_to_pause(self): self.playPauseButton.clicked.disconnect() self.playPauseButton.clicked.connect(self._play) self.playPauseButton.setIcon(QIcon.fromTheme('media-playback-start')) def _pause_to_play(self): self.playPauseButton.clicked.disconnect() self.playPauseButton.clicked.connect(self._pause) self.playPauseButton.setIcon(QIcon.fromTheme('media-playback-pause'))