用于raspberry pi开发的简单python GUI
我需要一些帮助,让我的gui按照我的意愿运行。因此,对于我的GUI,我需要两个按钮和一个计时器。按“开始/暂停”键时计时器倒计时,然后再次按时暂停。另一个按钮重置应该很容易,就像重置Qtimer一样 我试图使用qtdesigner来确认gui的布局,虽然这样做有效,但我似乎无法添加计时器,反之亦然。(根据.py文件中位于较高位置的文件,它不会显示)。对于计时器,我一直在胡乱修改这个问题的答案。任何帮助我得到一个倒计时计时器与按钮接口工作将是非常有帮助的 我对我的代码做了一些更改,添加了修复按钮槽的功能。我仍然无法让计时器显示错误“Ui_Form”对象没有属性“setCentralWidget”,我无法终身修复该属性。请有人帮我把计时器放在gui上,我可以配置它的位置用于raspberry pi开发的简单python GUI,python,qt,pyqt,raspberry-pi,pyqt5,Python,Qt,Pyqt,Raspberry Pi,Pyqt5,我需要一些帮助,让我的gui按照我的意愿运行。因此,对于我的GUI,我需要两个按钮和一个计时器。按“开始/暂停”键时计时器倒计时,然后再次按时暂停。另一个按钮重置应该很容易,就像重置Qtimer一样 我试图使用qtdesigner来确认gui的布局,虽然这样做有效,但我似乎无法添加计时器,反之亦然。(根据.py文件中位于较高位置的文件,它不会显示)。对于计时器,我一直在胡乱修改这个问题的答案。任何帮助我得到一个倒计时计时器与按钮接口工作将是非常有帮助的 我对我的代码做了一些更改,添加了修复按钮槽
import sys
from PyQt5 import QtCore, QtWidgets
#import pymongo
#import socket
#import json
#from time import sleep
DURATION_INT = 300
state = "stopped"
#connection = pymongo.MongoClient(host='192.168.4.2', port=27017)
#db = connection.restdb
class Ui_Form(object):
def setupUi(self, Form):
global state
super().__init__()
Form.setObjectName("Form")
Form.resize(648, 561)
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(170, 460, 93, 28))
self.pushButton_2.setObjectName("pushButton_2")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(190, 110, 231, 101))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(Form)
self.lineEdit_2.setGeometry(QtCore.QRect(230, 270, 61, 51))
self.lineEdit_2.setObjectName("lineEdit_2")
self.textEdit = QtWidgets.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(290, 270, 21, 51))
self.textEdit.setObjectName("textEdit")
self.lineEdit_3 = QtWidgets.QLineEdit(Form)
self.lineEdit_3.setGeometry(QtCore.QRect(310, 270, 61, 51))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(360, 460, 93, 28))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
self.pushButton.clicked.connect(self.start_pause)
self.pushButton_2.clicked.connect(self.reset)
######################################################
self.time_left_int = DURATION_INT
self.widget_counter_int = 0
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
vbox = QtWidgets.QVBoxLayout()
central_widget.setLayout(vbox)
self.pages_qsw = QtWidgets.QStackedWidget()
vbox.addWidget(self.pages_qsw)
self.time_passed_qll = QtWidgets.QLabel()
vbox.addWidget(self.time_passed_qll)
self.widget_one = QtWidgets.QLabel()
self.pages_qsw.addWidget(self.widget_one)
self.timer_start()
self.update_gui()
#####################################################
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton_2.setText(_translate("Form", "Reset"))
self.pushButton.setText(_translate("Form", "Start/Pause"))
def timer_start(self):
self.time_left_int = DURATION_INT
self.my_qtimer = QtCore.QTimer()
self.my_qtimer.timeout.connect(self.timer_timeout)
self.my_qtimer.start(1000)
self.update_gui()
def timer_timeout(self):
self.time_left_int -= 1
if self.time_left_int == -1:
self.widget_counter_int = (self.widget_counter_int + 1) % 4
self.pages_qsw.setCurrentIndex(self.widget_counter_int)
self.time_left_int = DURATION_INT
self.update_gui()
def update_gui(self):
self.time_passed_qll.setText(str(self.time_left_int))
def start_pause(self):
global state
if (state == "stopped" or state == "paused"):
state = "running"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
elif (state == "running"):
state = "paused"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
def reset(self):
global state
state = "stopped"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
TL;DR:您似乎没有完全理解GUI对象树(哪些QWidget项连接到哪个QWidget/布局父项) 改变
Form.setCentralWidget(central_widget)
到
将显示表单,带倒计时计时器的标签位于左下角。它不会对按钮做出反应,因为带有标签和小部件的QVBoxLayout在顶部,但至少它会倒计时
您可以使用以下语句向QWidget(或子类)添加背景色:
您将看到手动定位的小部件隐藏在红色矩形后面。这也意味着widget_one将捕获所有鼠标事件,您不能单击任何东西
我建议您不要混合使用setLayout()和setCentralWidget(),因为这将导致鼠标和键盘事件(有时是不明显的)问题
总之,我假设您想展示这样的东西(我已经把QStackedWidget放在里面了,因为我假设您以后想使用它)
导入系统
从PyQt5导入QtCore、QtGui、QtWidgets
#进口pymongo
#导入套接字
#导入json
#从时间上导入睡眠
持续时间=300
state=“已停止”
#connection=pymongo.MongoClient(主机=192.168.4.2',端口=27017)
#db=connection.restdb
类Ui_表单(对象):
def setupUi(自我,表格):
全球国家
super()。\uuuu init\uuuuu()
Form.setObjectName(“表单”)
表单。调整大小(648561)
######################################################
self.time\u left\u int=持续时间
self.widget\u计数器\u int=0
central_widget=qtwidts.QWidget()
Form.setCentralWidget(中心窗口小部件)
vbox=qtwidts.QVBoxLayout()
central_widget.setLayout(vbox)
self.time_passed_qll=qtwidts.QLabel()
vbox.addWidget(self.time\u passed\u qll)
self.time_passed_qll.setAlignment(QtCore.Qt.AlignCenter)
self.time_passed_qll.setFrameStyle(qtwidts.QFrame.Panel | qtwidts.QFrame.Sunken);
self.time_passed_qll.setTextFormat(QtCore.Qt.RichText)#以便能够使用html标记进行颜色设置!
self.pages_qsw=QtWidgets.QStackedWidget()
vbox.addWidget(self.pages_qsw)
self.widget_one=qtwidts.QWidget()
#pal=QtGui.qpalete()
#pal.setColor(QtGui.qpalete.Background,QtCore.Qt.red)
#self.widget_one.setAutoFillBackground(True)
#self.widget_one.setPalette(pal)
self.pages\u qsw.addWidget(self.widget\u one)
self.butdown_2=qtwidts.QPushButton(self.widget_一)
自动按钮2.设置几何(QtCore.QRect(1704609328))
self.butdown_2.setObjectName(“butdown_2”)
self.lineEdit=qtwidts.QLineEdit(self.widget_one)
self.lineEdit.setGeometry(QtCore.QRect(190110231101))
self.lineEdit.setObjectName(“lineEdit”)
self.lineEdit_2=qtwidts.QLineEdit(self.widget_one)
self.lineEdit_2.setGeometry(QtCore.QRect(230、270、61、51))
self.lineEdit_2.setObjectName(“lineEdit_2”)
self.textEdit=qtwidts.QTextEdit(self.widget\u one)
self.textEdit.setGeometry(QtCore.QRect(290270 21 51))
self.textEdit.setObjectName(“textEdit”)
self.lineEdit_3=qtwidts.QLineEdit(self.widget_one)
self.lineEdit_3.setGeometry(QtCore.QRect(310、270、61、51))
self.lineEdit_3.setObjectName(“lineEdit_3”)
self.butdown=qtwidts.QPushButton(self.widget\u one)
自身按钮设置几何(QtCore.QRect(360、460、93、28))
self.butdown.setObjectName(“butdown”)
自重传(表格)
self.button.clicked.connect(self.start\u暂停)
自复位按钮2.点击连接(自复位)
self.timer_start()
self.update_gui()
#####################################################
def重新传输(自身,表格):
_translate=QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate(“Form”,“Form”))
self.button_2.setText(_translate(“Form”,“Reset”))
self.butdown.setText(_translate(“Form”,“Start/Pause”))
def定时器_启动(自):
self.time\u left\u int=持续时间
self.my_qtimer=QtCore.qtimer()
self.my\u qtimer.timeout.connect(self.timer\u timeout)
self.my_qtimer.start(1000)
self.update_gui()
def定时器_超时(自身):
全球国家
如果状态==“正在运行”:
self.time\u left\u int-=1
如果self.time\u left\u int==-1:
self.widget\u counter\u int=(self.widget\u counter\u int+1)%4
self.pages\u qsw.setCurrentIndex(self.widget\u counter\u int)
self.time\u left\u int=持续时间
self.update_gui()
def更新_gui(自身):
self.time\u passed\u qll.setText('{}
'.format(self.time\u left\u int)) self.lineEdit.setText(str(self.time\u left\u int)) def启动暂停(自我): 全球国家 如果(说明)== self.setCentralWidget(central_widget)
pal = QtGui.QPalette()
pal.setColor(QtGui.QPalette.Background, QtCore.Qt.red)
self.widget_one.setAutoFillBackground(True)
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#import pymongo
#import socket
#import json
#from time import sleep
DURATION_INT = 300
state = "stopped"
#connection = pymongo.MongoClient(host='192.168.4.2', port=27017)
#db = connection.restdb
class Ui_Form(object):
def setupUi(self, Form):
global state
super().__init__()
Form.setObjectName("Form")
Form.resize(648, 561)
######################################################
self.time_left_int = DURATION_INT
self.widget_counter_int = 0
central_widget = QtWidgets.QWidget()
Form.setCentralWidget(central_widget)
vbox = QtWidgets.QVBoxLayout()
central_widget.setLayout(vbox)
self.time_passed_qll = QtWidgets.QLabel()
vbox.addWidget(self.time_passed_qll)
self.time_passed_qll.setAlignment(QtCore.Qt.AlignCenter)
self.time_passed_qll.setFrameStyle(QtWidgets.QFrame.Panel | QtWidgets.QFrame.Sunken);
self.time_passed_qll.setTextFormat(QtCore.Qt.RichText) # to be able to use html tags for color!
self.pages_qsw = QtWidgets.QStackedWidget()
vbox.addWidget(self.pages_qsw)
self.widget_one = QtWidgets.QWidget()
#pal = QtGui.QPalette()
#pal.setColor(QtGui.QPalette.Background, QtCore.Qt.red)
#self.widget_one.setAutoFillBackground(True)
#self.widget_one.setPalette(pal)
self.pages_qsw.addWidget(self.widget_one)
self.pushButton_2 = QtWidgets.QPushButton(self.widget_one)
self.pushButton_2.setGeometry(QtCore.QRect(170, 460, 93, 28))
self.pushButton_2.setObjectName("pushButton_2")
self.lineEdit = QtWidgets.QLineEdit(self.widget_one)
self.lineEdit.setGeometry(QtCore.QRect(190, 110, 231, 101))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(self.widget_one)
self.lineEdit_2.setGeometry(QtCore.QRect(230, 270, 61, 51))
self.lineEdit_2.setObjectName("lineEdit_2")
self.textEdit = QtWidgets.QTextEdit(self.widget_one)
self.textEdit.setGeometry(QtCore.QRect(290, 270, 21, 51))
self.textEdit.setObjectName("textEdit")
self.lineEdit_3 = QtWidgets.QLineEdit(self.widget_one)
self.lineEdit_3.setGeometry(QtCore.QRect(310, 270, 61, 51))
self.lineEdit_3.setObjectName("lineEdit_3")
self.pushButton = QtWidgets.QPushButton(self.widget_one)
self.pushButton.setGeometry(QtCore.QRect(360, 460, 93, 28))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
self.pushButton.clicked.connect(self.start_pause)
self.pushButton_2.clicked.connect(self.reset)
self.timer_start()
self.update_gui()
#####################################################
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton_2.setText(_translate("Form", "Reset"))
self.pushButton.setText(_translate("Form", "Start/Pause"))
def timer_start(self):
self.time_left_int = DURATION_INT
self.my_qtimer = QtCore.QTimer()
self.my_qtimer.timeout.connect(self.timer_timeout)
self.my_qtimer.start(1000)
self.update_gui()
def timer_timeout(self):
global state
if state == "running":
self.time_left_int -= 1
if self.time_left_int == -1:
self.widget_counter_int = (self.widget_counter_int + 1) % 4
self.pages_qsw.setCurrentIndex(self.widget_counter_int)
self.time_left_int = DURATION_INT
self.update_gui()
def update_gui(self):
self.time_passed_qll.setText('<p style="color:green;font-size:24px">{}</p>'.format(self.time_left_int))
self.lineEdit.setText(str(self.time_left_int))
def start_pause(self):
global state
if (state == "stopped" or state == "paused"):
state = "running"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
elif (state == "running"):
state = "paused"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
def reset(self):
global state
self.time_left_int = DURATION_INT
state = "stopped"
print(state)
#for g in gameData.find():
# gameData.update({'_id' : g['_id']}, {'state': state})
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())