form.py
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 6.8.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QListWidget,
QListWidgetItem, QPushButton, QSizePolicy, QVBoxLayout,
QWidget)
class Ui_Form(object):
def setupUi(self, Form):
if not Form.objectName():
Form.setObjectName(u"Form")
Form.resize(600, 300)
self.horizontalLayout = QHBoxLayout(Form)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.listWidget = QListWidget(Form)
self.listWidget.setObjectName(u"listWidget")
self.listWidget.setMinimumSize(QSize(344, 0))
self.horizontalLayout.addWidget(self.listWidget)
self.stackLabel = QLabel(Form)
self.stackLabel.setObjectName(u"stackLabel")
self.stackLabel.setStyleSheet(u"font-size: 16px; color: #333;")
self.stackLabel.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.stackLabel)
self.removedLabel = QLabel(Form)
self.removedLabel.setObjectName(u"removedLabel")
self.removedLabel.setStyleSheet(u"font-size: 16px; color: #333;")
self.removedLabel.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.removedLabel)
self.verticalLayout = QVBoxLayout()
self.verticalLayout.setObjectName(u"verticalLayout")
self.pushButton = QPushButton(Form)
self.pushButton.setObjectName(u"pushButton")
self.pushButton.setStyleSheet(u"QPushButton { background-color: #4CAF50; color: white; font-size: 14px; padding: 10px; border-radius: 5px; }\n"
"QPushButton:hover { background-color: #45a049; }")
self.verticalLayout.addWidget(self.pushButton)
self.popButton = QPushButton(Form)
self.popButton.setObjectName(u"popButton")
self.popButton.setStyleSheet(u"QPushButton { background-color: #f44336; color: white; font-size: 14px; padding: 10px; border-radius: 5px; }\n"
"QPushButton:hover { background-color: #e53935; }")
self.verticalLayout.addWidget(self.popButton)
self.cancelButton = QPushButton(Form)
self.cancelButton.setObjectName(u"cancelButton")
self.cancelButton.setStyleSheet(u"QPushButton { background-color: #008CBA; color: white; font-size: 14px; padding: 10px; border-radius: 5px; }\n"
"QPushButton:hover { background-color: #007B9E; }")
self.verticalLayout.addWidget(self.cancelButton)
self.horizontalLayout.addLayout(self.verticalLayout)
self.retranslateUi(Form)
QMetaObject.connectSlotsByName(Form)
# setupUi
def retranslateUi(self, Form):
Form.setWindowTitle(QCoreApplication.translate("Form", u"\u6808\u6a21\u62df\u6f14\u793a", None))
self.stackLabel.setText(QCoreApplication.translate("Form", u"\u6808\u5185\u5bb9(\u6700\u53f3\u8fb9\u662f\u6808\u9876)\uff1a[]", None))
self.removedLabel.setText(QCoreApplication.translate("Form", u"\u51fa\u6808\u7269\u54c1\uff1a\u65e0", None))
self.pushButton.setText(QCoreApplication.translate("Form", u"\u5165\u6808", None))
self.popButton.setText(QCoreApplication.translate("Form", u"\u51fa\u6808", None))
self.cancelButton.setText(QCoreApplication.translate("Form", u"\u53d6\u6d88", None))
# retranslateUi
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox
from PyQt6.uic import loadUi
class StackDemo(QWidget):
def __init__(self):
super().__init__()
# 加载 UI 文件
loadUi("form.ui", self)
# 初始化数据
self.items = ["苹果", "梨", "香蕉", "黄瓜", "西红柿", "桔子"]
self.stack = []
self.removed_item = None
# 初始化列表显示
self.listWidget.addItems(self.items)
# 连接按钮信号与槽函数
self.pushButton.clicked.connect(self.push_item)
self.popButton.clicked.connect(self.pop_item)
self.cancelButton.clicked.connect(self.cancel_item)
def push_item(self):
"""入栈操作"""
if self.items: # 确保列表不为空
selected_items = self.listWidget.selectedItems() # 获取所有选中的项
if selected_items: # 如果有选中的项
item = selected_items[0].text() # 获取选中项的文本
self.items.remove(selected_items[0].text())
else:
item = self.items.pop(0) # 否则取列表中的第一个元素
self.stack.append(item) # 将选中的元素添加到栈中
self.update_display()
else:
self.show_message("提示", "列表中没有物品可以入栈!")
def pop_item(self):
"""出栈操作"""
if self.stack:
self.removed_item = self.stack.pop() # 从栈移除顶部元素
self.update_display()
print({self.removed_item})
else:
self.show_message("提示", "栈为空,无法出栈!")
def cancel_item(self):
"""取消操作"""
if self.stack:
item = self.stack.pop() # 从栈移除顶部元素
self.items.insert(0, item) # 返回到列表
self.update_display()
else:
self.show_message("提示", "栈为空,无法取消!")
def update_display(self):
"""更新界面显示"""
# 更新列表
self.listWidget.clear()
self.listWidget.addItems(self.items)
# 更新栈内容
self.stackLabel.setText(f"栈内容:{self.stack}")
# 更新出栈物品
if self.removed_item:
self.removedLabel.setText(f"出栈物品:{self.removed_item}")
else:
self.removedLabel.setText("出栈物品:无")
def show_message(self, title, message):
"""显示提示框"""
QMessageBox.information(self, title, message)
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = StackDemo()
demo.show()
sys.exit(app.exec())