import
sys
import
datetime
from
PyQt6.QtWidgets
import
(QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QLabel, QPushButton, QRadioButton,
QDateTimeEdit, QTimeEdit, QMessageBox)
from
PyQt6.QtCore
import
Qt, QTimer, QDateTime
from
PyQt6.QtGui
import
QFont, QPalette, QColor
import
subprocess
class
ShutdownTimer(QMainWindow):
def
__init__(
self
):
super
().__init__()
self
.shutdown_time
=
None
self
.timer
=
QTimer()
self
.timer.timeout.connect(
self
.update_countdown)
self
.init_ui()
def
init_ui(
self
):
self
.setWindowTitle(
'定时关机器V1.0 吾爱破解@mryouan'
)
screen
=
QApplication.primaryScreen().geometry()
self
.setGeometry(screen.width()
/
/
4
, screen.height()
/
/
4
,
screen.width()
/
/
2
, screen.height()
/
/
2
)
central_widget
=
QWidget()
self
.setCentralWidget(central_widget)
layout
=
QVBoxLayout(central_widget)
self
.countdown_label
=
QLabel(
'未设置定时关机'
)
self
.countdown_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self
.countdown_label.setStyleSheet(
)
self
.countdown_label.setFont(QFont(
'Arial'
,
40
))
layout.addWidget(
self
.countdown_label)
settings_widget
=
QWidget()
settings_layout
=
QHBoxLayout(settings_widget)
time_widget
=
QWidget()
time_layout
=
QVBoxLayout(time_widget)
self
.absolute_radio
=
QRadioButton(
'绝对时间'
)
self
.relative_radio
=
QRadioButton(
'相对时间'
)
self
.absolute_radio.setChecked(
True
)
time_layout.addWidget(
self
.absolute_radio)
time_layout.addWidget(
self
.relative_radio)
self
.datetime_edit
=
QDateTimeEdit()
self
.datetime_edit.setDateTime(
QDateTime.currentDateTime().addSecs(
3600
))
self
.time_edit
=
QTimeEdit()
self
.time_edit.setTime(
self
.time_edit.time().addSecs(
3600
))
time_layout.addWidget(
self
.datetime_edit)
time_layout.addWidget(
self
.time_edit)
self
.time_edit.hide()
settings_layout.addWidget(time_widget)
button_widget
=
QWidget()
button_layout
=
QVBoxLayout(button_widget)
self
.execute_btn
=
QPushButton(
'执行'
)
self
.cancel_btn
=
QPushButton(
'取消'
)
button_layout.addWidget(
self
.execute_btn)
button_layout.addWidget(
self
.cancel_btn)
settings_layout.addWidget(button_widget)
layout.addWidget(settings_widget)
self
.absolute_radio.toggled.connect(
self
.toggle_time_input)
self
.execute_btn.clicked.connect(
self
.execute_shutdown)
self
.cancel_btn.clicked.connect(
self
.cancel_shutdown)
def
toggle_time_input(
self
):
if
self
.absolute_radio.isChecked():
self
.datetime_edit.show()
self
.time_edit.hide()
else
:
self
.datetime_edit.hide()
self
.time_edit.show()
def
execute_shutdown(
self
):
if
self
.absolute_radio.isChecked():
shutdown_time
=
self
.datetime_edit.dateTime().toPyDateTime()
if
shutdown_time <
=
datetime.datetime.now():
QMessageBox.warning(
self
,
'警告'
,
'请选��未来的时间!'
)
return
else
:
current_time
=
datetime.datetime.now()
time_delta
=
datetime.timedelta(
hours
=
self
.time_edit.time().hour(),
minutes
=
self
.time_edit.time().minute(),
seconds
=
self
.time_edit.time().second()
)
shutdown_time
=
current_time
+
time_delta
self
.shutdown_time
=
shutdown_time
seconds
=
int
((shutdown_time
-
datetime.datetime.now()).total_seconds())
subprocess.run([
'shutdown'
,
'/s'
,
'/t'
,
str
(seconds)])
self
.execute_btn.setEnabled(
False
)
self
.execute_btn.setText(
'执行中'
)
self
.execute_btn.setStyleSheet(
'background-color: #90EE90; color: gray;'
)
self
.timer.start(
1000
)
def
cancel_shutdown(
self
):
reply
=
QMessageBox.question(
self
,
'确认'
,
'是否要修改定时?'
,
QMessageBox.StandardButton.Yes |
QMessageBox.StandardButton.No)
if
reply
=
=
QMessageBox.StandardButton.Yes:
subprocess.run([
'shutdown'
,
'/a'
])
self
.reset_ui()
else
:
subprocess.run([
'shutdown'
,
'/a'
])
self
.close()
def
reset_ui(
self
):
self
.shutdown_time
=
None
self
.timer.stop()
self
.countdown_label.setText(
'未设置定时关机'
)
self
.execute_btn.setEnabled(
True
)
self
.execute_btn.setText(
'执行'
)
self
.execute_btn.setStyleSheet('')
def
update_countdown(
self
):
if
self
.shutdown_time:
remaining
=
self
.shutdown_time
-
datetime.datetime.now()
if
remaining.total_seconds() <
=
0
:
self
.timer.stop()
return
hours
=
remaining.seconds
/
/
3600
minutes
=
(remaining.seconds
%
3600
)
/
/
60
seconds
=
remaining.seconds
%
60
self
.countdown_label.setText(
f
'距离关机还有{hours:02d}小时{minutes:02d}分{seconds:02d}秒'
)
if
__name__
=
=
'__main__'
:
app
=
QApplication(sys.argv)
app.setStyle(
'Fusion'
)
window
=
ShutdownTimer()
window.show()
sys.exit(app.
exec
())