py+qt 模拟栈 入栈出栈

发布于:2025-02-10 ⋅ 阅读:(60) ⋅ 点赞:(0)



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())


网站公告

今日签到

点亮在社区的每一天
去签到