导入.csv数据以填充QTableWidget

发布于 2025-02-05 12:08:33 字数 7028 浏览 1 评论 0原文

我正在建立一个GUI,我需要在屏幕上显示几个CSV文件的数据。我尝试过,但不能提出解决方案。我是编程和Python的新手。我会得到我能得到的任何建议。

您可以使用CSV模块吗?例如:

def loadCsvFile(self, test.csv):
        with open(test.csv, "r") as stream:
            for row in csv.reader(stream):

Bellow是我的UI文件的片段,这是巨大的。但是我想用CSV内容填充称为Xerox_work_centre_db的QTableWidget。我想知道如何实现这一目标?

self.verticalLayout_13.addWidget(self.Monitor_header, 0, Qt.AlignTop)

        self.Monitor_main_content = QFrame(self.Monitor)
        self.Monitor_main_content.setObjectName(u"Monitor_main_content")
        sizePolicy.setHeightForWidth(self.Monitor_main_content.sizePolicy().hasHeightForWidth())
        self.Monitor_main_content.setSizePolicy(sizePolicy)
        self.Monitor_main_content.setFrameShape(QFrame.StyledPanel)
        self.Monitor_main_content.setFrameShadow(QFrame.Raised)
        self.Xerox_workcentre_db = QTableWidget(self.Monitor_main_content)
        self.Xerox_workcentre_db.setObjectName(u"Xerox_workcentre_db")
        self.Xerox_workcentre_db.setGeometry(QRect(0, 1, 801, 611))

        self.verticalLayout_13.addWidget(self.Monitor_main_content)

        self.stackedWidget.addWidget(self.Monitor)
        self.Alerts = QWidget()
        self.Alerts.setObjectName(u"Alerts")
        self.stackedWidget.addWidget(self.Alerts)
        self.Order = QWidget()
        self.Order.setObjectName(u"Order")
        self.stackedWidget.addWidget(self.Order)

        self.verticalLayout_12.addWidget(self.stackedWidget)


        self.verticalLayout.addWidget(self.main_body_content)

        self.footer = QFrame(self.main_body)
        self.footer.setObjectName(u"footer")
        self.footer.setStyleSheet(u"QFrame{\n"

更新的代码,现在返回以下错误:

文件“ C:\ temp \ github \ csv_to_ui \ main.py”,第176行,在LoadCSV中 self.model.appendrow(项目) 没有属性'模型'

attributeError:'mainwindow'对象从ui_interface.py

self.verticalLayout_13.addWidget(self.Monitor_header, 0, Qt.AlignTop)

        self.Monitor_main_content = QFrame(self.Monitor)
        self.Monitor_main_content.setObjectName(u"Monitor_main_content")
        sizePolicy.setHeightForWidth(self.Monitor_main_content.sizePolicy().hasHeightForWidth())
        self.Monitor_main_content.setSizePolicy(sizePolicy)
        self.Monitor_main_content.setFrameShape(QFrame.StyledPanel)
        self.Monitor_main_content.setFrameShadow(QFrame.Raised)
        self.verticalLayout_18 = QVBoxLayout(self.Monitor_main_content)
        self.verticalLayout_18.setSpacing(0)
        self.verticalLayout_18.setObjectName(u"verticalLayout_18")
        self.verticalLayout_18.setContentsMargins(0, 0, 0, 0)
        #######################################
        ### CSV CONTENT
        self.model = QStandardItemModel(MainWindow)
        self.Xerox_workcentre_db = QTableView(self.Monitor_main_content)
        self.Xerox_workcentre_db.setObjectName(u"Xerox_workcentre_db")
        self.Xerox_workcentre_db.setModel(self.model)
        self.Xerox_workcentre_db.horizontalHeader().setStretchLastSection(True)

        self.verticalLayout_18.addWidget(self.Xerox_workcentre_db)
        #######################################

## MAIN WINDOW CLASS
########################################################################
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(50)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 92, 157, 550))
        self.ui.centralwidget.setGraphicsEffect(self.shadow)
        self.setWindowIcon(QIcon(""))
        # Set window tittle
        self.setWindowTitle("Printer Monitoring v1.0")
        QSizeGrip(self.ui.size_grip)

        #######################################################################
        ## Button for loadCsv
        self.ui.Xerox_workcentre_button.clicked.connect(self.loadCsv)
        
#######################################################################

        self.ui.minimize_window_button.clicked.connect(lambda: self.showMinimized())
        
        self.ui.close_window_button.clicked.connect(lambda: self.close())
        self.ui.exit_button.clicked.connect(lambda: self.close())

        
        self.ui.restore_window_button.clicked.connect(lambda: self.restore_or_maximize_window())
        

        def moveWindow(e):
            if self.isMaximized() == False:  # Not maximized
                if e.buttons() == Qt.LeftButton:             
                    self.move(self.pos() + e.globalPos() - self.clickPosition)
                    self.clickPosition = e.globalPos()
                    e.accept()

        
        self.ui.header_frame.mouseMoveEvent = moveWindow     
        self.ui.open_close_side_bar_btn.clicked.connect(lambda: self.slideLeftMenu())

        self.show()

    
    def slideLeftMenu(self):
        # Get current left menu width
        width = self.ui.slide_menu_container.width()

        # If minimized
        if width == 0:
            # Expand menu
            newWidth = 200
            self.ui.open_close_side_bar_btn.setIcon(QIcon(u":/icons/icons/chevron-left-solid-white.svg"))
        # If maximized
        else:
            # Restore menu
            newWidth = 0
            self.ui.open_close_side_bar_btn.setIcon(QIcon(u":/icons/icons/bars-solid-white.svg"))

        # Animate the transition
        self.animation = QPropertyAnimation(self.ui.slide_menu_container, b"minimumWidth")  # Animate minimumWidth
        self.animation.setDuration(350)
        self.animation.setStartValue(width)  # Start value is the current menu width
        self.animation.setEndValue(newWidth)  # end value is the new menu width
        self.animation.setEasingCurve(QEasingCurve.InOutQuart)
        self.animation.start()

    def mousePressEvent(self, event):
        self.clickPosition = event.globalPos()

    def restore_or_maximize_window(self):
        # If window is maximized
        if self.isMaximized():
            self.showNormal()
            # Change Icon
            self.ui.restore_window_button.setIcon(QIcon(u":/icons/icons/window-maximize-regular-white.svg"))
        else:
            self.showMaximized()
            self.ui.restore_window_button.setIcon(QIcon(u":/icons/icons/window-restore-solid-white.svg"))
    #######################################################################
    # CALL XEROX CSV FUNCTION

    def loadCsv(self):
        fileName= 'Xerox_workcentre_test.csv'
        with open(fileName, "r") as fileInput:
            for row in csv.reader(fileInput):
                items = [
                    QtGui.QStandardItem(field)
                    for field in row
                ]
                self.model.appendRow(items)

Im building a GUI where i have the need to display data from a few CSV-files onto the screen. I've tried but cant come up with a solution. I'm sort of new to programing and python. I'll take any advice I can get.

Could you use the CSV module? for instance:

def loadCsvFile(self, test.csv):
        with open(test.csv, "r") as stream:
            for row in csv.reader(stream):

Bellow is a snippet of my UI file, which is huge. But i want to fill the QTableWidget called Xerox_work_centre_db with the CSV contents. And I was wondering how I could achieve this?

self.verticalLayout_13.addWidget(self.Monitor_header, 0, Qt.AlignTop)

        self.Monitor_main_content = QFrame(self.Monitor)
        self.Monitor_main_content.setObjectName(u"Monitor_main_content")
        sizePolicy.setHeightForWidth(self.Monitor_main_content.sizePolicy().hasHeightForWidth())
        self.Monitor_main_content.setSizePolicy(sizePolicy)
        self.Monitor_main_content.setFrameShape(QFrame.StyledPanel)
        self.Monitor_main_content.setFrameShadow(QFrame.Raised)
        self.Xerox_workcentre_db = QTableWidget(self.Monitor_main_content)
        self.Xerox_workcentre_db.setObjectName(u"Xerox_workcentre_db")
        self.Xerox_workcentre_db.setGeometry(QRect(0, 1, 801, 611))

        self.verticalLayout_13.addWidget(self.Monitor_main_content)

        self.stackedWidget.addWidget(self.Monitor)
        self.Alerts = QWidget()
        self.Alerts.setObjectName(u"Alerts")
        self.stackedWidget.addWidget(self.Alerts)
        self.Order = QWidget()
        self.Order.setObjectName(u"Order")
        self.stackedWidget.addWidget(self.Order)

        self.verticalLayout_12.addWidget(self.stackedWidget)


        self.verticalLayout.addWidget(self.main_body_content)

        self.footer = QFrame(self.main_body)
        self.footer.setObjectName(u"footer")
        self.footer.setStyleSheet(u"QFrame{\n"

Updated Code, it now returns the following error:

File "C:\Temp\GitHub\CSV_to_UI\main.py", line 176, in loadCsv
self.model.appendRow(items)
AttributeError: 'MainWindow' object has no attribute 'model'

From ui_interface.py

self.verticalLayout_13.addWidget(self.Monitor_header, 0, Qt.AlignTop)

        self.Monitor_main_content = QFrame(self.Monitor)
        self.Monitor_main_content.setObjectName(u"Monitor_main_content")
        sizePolicy.setHeightForWidth(self.Monitor_main_content.sizePolicy().hasHeightForWidth())
        self.Monitor_main_content.setSizePolicy(sizePolicy)
        self.Monitor_main_content.setFrameShape(QFrame.StyledPanel)
        self.Monitor_main_content.setFrameShadow(QFrame.Raised)
        self.verticalLayout_18 = QVBoxLayout(self.Monitor_main_content)
        self.verticalLayout_18.setSpacing(0)
        self.verticalLayout_18.setObjectName(u"verticalLayout_18")
        self.verticalLayout_18.setContentsMargins(0, 0, 0, 0)
        #######################################
        ### CSV CONTENT
        self.model = QStandardItemModel(MainWindow)
        self.Xerox_workcentre_db = QTableView(self.Monitor_main_content)
        self.Xerox_workcentre_db.setObjectName(u"Xerox_workcentre_db")
        self.Xerox_workcentre_db.setModel(self.model)
        self.Xerox_workcentre_db.horizontalHeader().setStretchLastSection(True)

        self.verticalLayout_18.addWidget(self.Xerox_workcentre_db)
        #######################################

From main.py

## MAIN WINDOW CLASS
########################################################################
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(50)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 92, 157, 550))
        self.ui.centralwidget.setGraphicsEffect(self.shadow)
        self.setWindowIcon(QIcon(""))
        # Set window tittle
        self.setWindowTitle("Printer Monitoring v1.0")
        QSizeGrip(self.ui.size_grip)

        #######################################################################
        ## Button for loadCsv
        self.ui.Xerox_workcentre_button.clicked.connect(self.loadCsv)
        
#######################################################################

        self.ui.minimize_window_button.clicked.connect(lambda: self.showMinimized())
        
        self.ui.close_window_button.clicked.connect(lambda: self.close())
        self.ui.exit_button.clicked.connect(lambda: self.close())

        
        self.ui.restore_window_button.clicked.connect(lambda: self.restore_or_maximize_window())
        

        def moveWindow(e):
            if self.isMaximized() == False:  # Not maximized
                if e.buttons() == Qt.LeftButton:             
                    self.move(self.pos() + e.globalPos() - self.clickPosition)
                    self.clickPosition = e.globalPos()
                    e.accept()

        
        self.ui.header_frame.mouseMoveEvent = moveWindow     
        self.ui.open_close_side_bar_btn.clicked.connect(lambda: self.slideLeftMenu())

        self.show()

    
    def slideLeftMenu(self):
        # Get current left menu width
        width = self.ui.slide_menu_container.width()

        # If minimized
        if width == 0:
            # Expand menu
            newWidth = 200
            self.ui.open_close_side_bar_btn.setIcon(QIcon(u":/icons/icons/chevron-left-solid-white.svg"))
        # If maximized
        else:
            # Restore menu
            newWidth = 0
            self.ui.open_close_side_bar_btn.setIcon(QIcon(u":/icons/icons/bars-solid-white.svg"))

        # Animate the transition
        self.animation = QPropertyAnimation(self.ui.slide_menu_container, b"minimumWidth")  # Animate minimumWidth
        self.animation.setDuration(350)
        self.animation.setStartValue(width)  # Start value is the current menu width
        self.animation.setEndValue(newWidth)  # end value is the new menu width
        self.animation.setEasingCurve(QEasingCurve.InOutQuart)
        self.animation.start()

    def mousePressEvent(self, event):
        self.clickPosition = event.globalPos()

    def restore_or_maximize_window(self):
        # If window is maximized
        if self.isMaximized():
            self.showNormal()
            # Change Icon
            self.ui.restore_window_button.setIcon(QIcon(u":/icons/icons/window-maximize-regular-white.svg"))
        else:
            self.showMaximized()
            self.ui.restore_window_button.setIcon(QIcon(u":/icons/icons/window-restore-solid-white.svg"))
    #######################################################################
    # CALL XEROX CSV FUNCTION

    def loadCsv(self):
        fileName= 'Xerox_workcentre_test.csv'
        with open(fileName, "r") as fileInput:
            for row in csv.reader(fileInput):
                items = [
                    QtGui.QStandardItem(field)
                    for field in row
                ]
                self.model.appendRow(items)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放飞的风筝 2025-02-12 12:08:34

由于我在main.py中具有函数loadCSV,而其余的则在ui_interface.py中。我称self.model错误。
我只是简单地从main.py初始化所有内容。

def loadCsv(self):
        fileName= 'Xerox_workcentre_test.csv'
        with open(fileName, "r") as fileInput:
            for row in csv.reader(fileInput):
                items = [
                    QtGui.QStandardItem(field)
                    for field in row
                ]
                self.ui.model.appendRow(items)

Since i had the Function loadCsv in the main.py and the rest in ui_interface.py. I called the self.model wrong.
I just simply had initialize everything from the main.py.

def loadCsv(self):
        fileName= 'Xerox_workcentre_test.csv'
        with open(fileName, "r") as fileInput:
            for row in csv.reader(fileInput):
                items = [
                    QtGui.QStandardItem(field)
                    for field in row
                ]
                self.ui.model.appendRow(items)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文