簡體   English   中英

無法填充tablewidget的某些單元格。 PyQt5

[英]Can't fill some cells of tablewidget. PyQt5

我正在編寫一個簡單的csv處理程序,它只使用python 3.7.2和pyqt5來查看兩列。 它將具有所需的行數,並且需要填充所有行以使我的程序正常工作。 但是當我運行我的循環時,20個單元中只有11個被填滿。 當我將行數減少到10時,此比率為6/10,而對於6,這是4/6。 我找不到為什么會這樣。

這是首先設置標頭的循環。

x = 0
    while x<total_rows:
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(x, item)
        x+=1

這是用零填充第一列的循環。

x = 0
    while x<total_rows:
        print(x)
        self.tableWidget.setItem(0,x, QtWidgets.QTableWidgetItem("0"))
        x+=1

這是用零填充第二列的循環。

x = 0
    while x<total_rows:
        print(x)
        self.tableWidget.setItem(1,x, QtWidgets.QTableWidgetItem("0"))
        x+=1

在解決我的問題時,您可能需要的其他細節是整個代碼。 (我現在沒有可用的文件共享平台。請接受我在文本中共享整個代碼的道歉。)

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'database.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
import os
from pandas import DataFrame, read_csv
import pandas as pd
from datetime import datetime
from PyQt5 import QtCore, QtGui, QtWidgets

total_rows = 20

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(551, 602)

        #Layout

    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
    self.verticalLayout.setContentsMargins(0, 0, 0, 0)
    self.verticalLayout.setSpacing(0)
    self.verticalLayout.setObjectName("verticalLayout")
    self.widget = QtWidgets.QWidget(self.centralwidget)
    self.widget.setMaximumSize(QtCore.QSize(16777215, 70))
    self.widget.setStyleSheet("background-color: black;")
    self.widget.setObjectName("widget")
    self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
    self.horizontalLayout.setObjectName("horizontalLayout")
    self.label = QtWidgets.QLabel(self.widget)
    self.label.setStyleSheet("color: white;\nfont-size: 36px;")
    self.label.setObjectName("label")
    self.horizontalLayout.addWidget(self.label)
    spacerItem = QtWidgets.QSpacerItem(337, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout.addItem(spacerItem)
    self.verticalLayout.addWidget(self.widget)
    self.widget_2 = QtWidgets.QWidget(self.centralwidget)
    self.widget_2.setStyleSheet("background-color: #777;")
    self.widget_2.setObjectName("widget_2")
    self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget_2)
    self.verticalLayout_2.setObjectName("verticalLayout_2")
    self.widget_3 = QtWidgets.QWidget(self.widget_2)
    self.widget_3.setStyleSheet("background-color: #556;")
    self.widget_3.setObjectName("widget_3")
    self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_3)
    self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
    self.verticalLayout_3.setSpacing(0)
    self.verticalLayout_3.setObjectName("verticalLayout_3")
    self.widget_5 = QtWidgets.QWidget(self.widget_3)
    self.widget_5.setStyleSheet("background-color:white;")
    self.widget_5.setObjectName("widget_5")
    self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_5)
    self.horizontalLayout_2.setObjectName("horizontalLayout_2")

    #TableWidget

    self.tableWidget = QtWidgets.QTableWidget(self.widget_5)
    sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
    sizePolicy.setHorizontalStretch(0)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
    self.tableWidget.setSizePolicy(sizePolicy)
    self.tableWidget.setStyleSheet("background-color: #eee;")
    self.tableWidget.setObjectName("tableWidget")
    self.tableWidget.setColumnCount(2)
    self.tableWidget.setRowCount(total_rows)
    x = 0
    while x<total_rows:
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(x, item)
        x+=1
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(0, item)
    item = QtWidgets.QTableWidgetItem()
    self.tableWidget.setHorizontalHeaderItem(1, item)
    self.horizontalLayout_2.addWidget(self.tableWidget)

    #CalendarWidget

    self.calendarWidget = QtWidgets.QCalendarWidget(self.widget_5)
    self.calendarWidget.setStyleSheet("color:black;")
    self.calendarWidget.setObjectName("calendarWidget")
    self.horizontalLayout_2.addWidget(self.calendarWidget)
    self.verticalLayout_3.addWidget(self.widget_5)
    self.widget_4 = QtWidgets.QWidget(self.widget_3)
    self.widget_4.setStyleSheet("background-color: white;")
    self.widget_4.setObjectName("widget_4")
    self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.widget_4)
    self.verticalLayout_5.setObjectName("verticalLayout_5")
    self.widget_8 = QtWidgets.QWidget(self.widget_4)
    self.widget_8.setObjectName("widget_8")
    self.verticalLayout_5.addWidget(self.widget_8)
    self.widget_9 = QtWidgets.QWidget(self.widget_4)
    self.widget_9.setObjectName("widget_9")
    self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.widget_9)
    self.horizontalLayout_6.setObjectName("horizontalLayout_6")
    spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout_6.addItem(spacerItem1)

    #PushButton

    self.pushButton = QtWidgets.QPushButton(self.widget_9)
    self.pushButton.setStyleSheet("background-color: black;\ncolor: white;")
    self.pushButton.setObjectName("pushButton")
    self.horizontalLayout_6.addWidget(self.pushButton)
    spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout_6.addItem(spacerItem2)
    self.verticalLayout_5.addWidget(self.widget_9)
    self.verticalLayout_3.addWidget(self.widget_4)
    self.verticalLayout_2.addWidget(self.widget_3)
    self.verticalWidget = QtWidgets.QWidget(self.widget_2)
    self.verticalWidget.setStyleSheet("background-color: white;")
    self.verticalWidget.setObjectName("verticalWidget")
    self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.verticalWidget)
    self.verticalLayout_4.setObjectName("verticalLayout_4")
    self.widget_7 = QtWidgets.QWidget(self.verticalWidget)
    self.widget_7.setObjectName("widget_7")
    self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget_7)
    self.horizontalLayout_4.setObjectName("horizontalLayout_4")

    #ListWidget

    self.listWidget = QtWidgets.QListWidget(self.widget_7)
    self.listWidget.setStyleSheet("background-color:#eee;")
    self.listWidget.setObjectName("listWidget")

    #Get files and insert into list widget

    files = os.listdir("files")
    for index, value in enumerate(files):
        item = QtWidgets.QListWidgetItem(value)
        self.listWidget.addItem(item)


    self.horizontalLayout_4.addWidget(self.listWidget)

    spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout_4.addItem(spacerItem3)
    self.verticalLayout_4.addWidget(self.widget_7)
    self.widget_6 = QtWidgets.QWidget(self.verticalWidget)
    self.widget_6.setObjectName("widget_6")
    self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_6)
    self.horizontalLayout_3.setObjectName("horizontalLayout_3")
    spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout_3.addItem(spacerItem4)

    #PushButton2

    self.pushButton_2 = QtWidgets.QPushButton(self.widget_6)
    self.pushButton_2.setStyleSheet("background-color:black;\ncolor:white;")
    self.pushButton_2.setObjectName("pushButton_2")
    self.horizontalLayout_3.addWidget(self.pushButton_2)

    spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
    self.horizontalLayout_3.addItem(spacerItem5)
    self.verticalLayout_4.addWidget(self.widget_6)
    self.verticalLayout_2.addWidget(self.verticalWidget)
    self.verticalLayout.addWidget(self.widget_2)
    MainWindow.setCentralWidget(self.centralwidget)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def save_file(self):

    #Takvim değerini al
    current_date = self.calendarWidget.selectedDate()
    current_date_text = current_date.toPyDate().strftime("%d%b%y")

    #Table'daki değerleri al
    allRows = self.tableWidget.rowCount()

    #Pandas table için listeleri oluştur
    headers = []
    items = []
    for row in range(0,allRows):
        print(row)
        item = self.tableWidget.item(row,1).text()
        items.append(item)
        item = self.tableWidget.item(row,0).text()
        headers.append(item)

    #dataset oluştur
    data_set = list(zip(headers,items))

    #dataframe oluştur
    data_frame = pd.DataFrame(data = data_set)

    #csv dosyası oluştur
    data_frame.to_csv("files/" + current_date_text + ".csv", index = False)

    #listview güncelle
    files = os.listdir("files")
    print(files)
    for index, value in enumerate(files):
        item = QtWidgets.QListWidgetItem(value)
        self.listWidget.addItem(item)
        item = self.listWidget.item(index)
        item.setText(value)

def open_file(self):
    #dosya ismini al
    selected_file = self.listWidget.currentItem().text()

    #csv dosyasını aç dataframe oluştur
    data_frame = pd.read_csv("files/" + selected_file)
    items = data_frame["0"].values.tolist()
    items = data_frame["1"].values.tolist()
    print(items)

    for row in range(0,total_rows):
        header = row
        item = self.tableWidget.setItem(0,row, QtWidgets.QTableWidgetItem(str(items[row])))

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

    #Set TableWidget

    self.label.setText(_translate("MainWindow", "Defter"))
    item = self.tableWidget.horizontalHeaderItem(0)
    item.setText(_translate("MainWindow", "Isim"))
    item = self.tableWidget.horizontalHeaderItem(1)
    item.setText(_translate("MainWindow", "Miktar"))
    x = 0
    while x<total_rows:
        print(x)
        self.tableWidget.setItem(0,x, QtWidgets.QTableWidgetItem("0"))
        x+=1

    x = 0
    while x<total_rows:
        print(x)
        self.tableWidget.setItem(1,x, QtWidgets.QTableWidgetItem("0"))
        x+=1
    self.pushButton.setText(_translate("MainWindow", "Kaydet"))
    self.pushButton.clicked.connect(self.save_file)
    __sortingEnabled = self.listWidget.isSortingEnabled()
    self.listWidget.setSortingEnabled(False)
    files = os.listdir("files")
    for index, value in enumerate(files):
        item = self.listWidget.item(index)
        item.setText(value)
    self.listWidget.setSortingEnabled(__sortingEnabled)
    self.pushButton_2.setText(_translate("MainWindow", "Dosyayı aç"))
    self.pushButton_2.clicked.connect(self.open_file)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

如果我的循環錯誤,我把print語句。 我檢查了所有循環運行20次(因為x值每次達到19)。

編輯:似乎兩位數是問題。但根據文檔,這種語法肯定是正確的。

self.tableWidget.setItem(1,10, QtWidgets.QTableWidgetItem("0"))

您使用列更改了行

# ...
        x = 0
        while x < total_rows:
# ---            self.tableWidget.setItem(0, x, QtWidgets.QTableWidgetItem("0")) 
            self.tableWidget.setItem(x, 0, QtWidgets.QTableWidgetItem("0"))     # +++
            x += 1

        x = 0
        while x<total_rows:
# ---           self.tableWidget.setItem(1,x, QtWidgets.QTableWidgetItem("0"))
            self.tableWidget.setItem(x, 1, QtWidgets.QTableWidgetItem("0"))     # +++
            x += 1

# ...

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM