Цикл Pyqt5 (PySide 2)
Цикл просто не работает, но мне надо чтобы оно каждую секунду проверяло, равно ли переменная time2, переменной time. По идеи это программа должна выключать комп тогда, когда укажет пользователь,но для теста оно просто должно выводить 2.
Код 1:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'vol.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.setMinimumSize(QtCore.QSize(349, 333))
MainWindow.setMaximumSize(QtCore.QSize(349, 333))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(60, 60, 231, 41))
font = QtGui.QFont()
font.setPointSize(10)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(60, 40, 55, 16))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(110, 210, 121, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(0, 250, 351, 61))
font = QtGui.QFont()
font.setPointSize(7)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Время"))
self.pushButton.setText(_translate("MainWindow", "Запуск"))
self.label_2.setText(_translate("MainWindow", "*Внимание, писать время только в формате чч:мм:сс."))
Код 2:
#import`s
import sys
import datetime
from PyQt5 import QtCore, QtGui, QtWidgets
from volu import Ui_MainWindow
#nothing
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
#nums
time = ui.lineEdit.text()
#def`s
def btn():
x = str(datetime.datetime.now())
x = x.split()
x = x[1]
x = x.split('.')
time2 = x[0]
while v == time:
if str(v) == time:
print("2")
#os.system('shutdown /s /t 01')
ui.pushButton.clicked.connect(btn)
#too nothing
sys.exit(app.exec_())
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Воспользуйтесь таймером QTimer:
from PyQt5.QtCore import QTimer
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
#def`s
# По клику на кнопке запускаем/останавливаем таймер
def btn():
# Если таймер не запущен то,
if not timer.isActive():
# Запустить таймер с интервалом 1 сек
timer.start(1000)
else:
timer.stop();
# слот для таймера
def timeout():
x = str(datetime.datetime.now())
x = x.split()
x = x[1]
x = x.split('.')
time2 = x[0]
# цикл while не нужен!
# вероятно v из вашего кода это time2
# time2 уже строка
if time2 == time:
print("2")
#os.system('shutdown /s /t 01')
ui.pushButton.clicked.connect(btn)
timer = QTimer()
timer.timeout.connect(timeout)
#nums
time = ui.lineEdit.text()
#too nothing
sys.exit(app.exec_())
Автор решения: S. Nick
→ Ссылка
я не проверял ваш алгоритм, но правильно делать так:
import sys
# import datetime
from PyQt5 import QtCore, QtGui, QtWidgets
#from volu import Ui_MainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.setMinimumSize(QtCore.QSize(349, 333))
MainWindow.setMaximumSize(QtCore.QSize(349, 333))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(60, 60, 231, 41))
font = QtGui.QFont()
font.setPointSize(10)
self.lineEdit.setFont(font)
self.lineEdit.setObjectName("lineEdit")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(60, 40, 55, 16))
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(110, 210, 121, 51))
font = QtGui.QFont()
font.setPointSize(12)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
# ? self.label_2 = QtWidgets.QLabel(self.centralwidget)
# ? self.label_2.setGeometry(QtCore.QRect(0, 250, 351, 61))
font = QtGui.QFont()
font.setPointSize(7)
font.setBold(True)
font.setWeight(75)
# ? self.label_2.setFont(font)
# ? self.label_2.setObjectName("label_2")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Время"))
self.pushButton.setText(_translate("MainWindow", "Запуск"))
# ? self.label_2.setText(_translate("MainWindow", "*Внимание, писать время только в формате чч:мм:сс."))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.on_btn)
self.lineEdit.setPlaceholderText('Введите время в формате ЧЧ:ММ:СС')
self.timer = QtCore.QTimer(self)
self.timer.setInterval(1000)
self.timer.timeout.connect(self.timerHit)
def timerHit(self):
current_time = QtCore.QTime.currentTime().toString()
time = self.lineEdit.text()
print(time, current_time)
if time == current_time:
msg = QtWidgets.QMessageBox.information(
self,
'ВНИМАНИЕ',
'Пришло время, делайте что-нибудь!')
def on_btn(self):
self.timer.start()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

