简体   繁体   English

在QTable中打开CSV文件时程序关闭

[英]program close when open csv file in qtable

when I added function for a button to show data in CSV file when I click the program, it closes itself. 单击该程序后,当我添加了用于在CSV文件中显示数据的按钮的功能时,它会自行关闭。 I altered my code, however, the same problem persists. 我更改了代码,但是同样的问题仍然存在。

Debug does not show any error messages. 调试不显示任何错误消息。 I'm a beginner in qt and if there alternatives to qtablewidget or better ways to tackle this, please let me know. 我是qt的初学者,如果有qtablewidget替代品或解决此问题的更好方法,请告诉我。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'officer.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

import sys
import csv
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(QtWidgets.QWidget):
def setupUi(self, Form):
    Form.setObjectName("Form")
    Form.resize(930, 650)
    self.fname = "data.csv"
    self.combo_data2 = {0: ['إيهاب السيد محمود السيد'],
                        1: ['محمد مدحت محمد', 'محمد عبدالرؤوف متولي', 'وليد عزت عبدالمؤمن', 'هاني حسنين أحمد حسنين',
                            'محمود السيد سليمان'], 2: ['حازم فتحي مختار', 'أمير محمود سيد', 'أحمد عبدالجليل'],
                        3: ['ابراهيم مختار عبدالقوي', "أحمد عفيفي محمود عفيفي", 'محمود عبدالعزيز عبدالحميد',
                            'حسام جابر عبدالعزيز', 'إسلام مصطفى محمد', 'محمد عطيوة عبدالرازق'],
                        4: ["إسلام عبدالرحمن حسن", "محمد عبدالمنعم محمد يونس", 'محمد فتحي عبدالوهاب',
                            'محمود عبدالسلام', 'عاصم عادل عبدالعزيز'],
                        5: ["أحمد محمد عزت", "محمد رضا عبدالعظيم", "أحمد رمضان موسى", "عمر عناني عناني",
                            "حازم سامي ابراهيم", 'عبدالرحمن سمير ', 'أحمد محمد ابراهيم', 'محمد أحمد عايش',
                            'سعيد مدحت رأفت', 'أحمد محمد محمود البقري', 'وليد ابراهيم عبدالمجيد',
                            'محمد عبدالحميد سالم', 'حاتم محمد نجيب'], 6: ["محمود سامي عبدالغفار شعير"]}
    self.pushButton = QtWidgets.QPushButton(Form)
    self.pushButton.setGeometry(QtCore.QRect(190, 60, 75, 22))
    self.pushButton.setObjectName("pushButton")
    self.pushButton1 = QtWidgets.QPushButton(Form)
    self.pushButton1.setGeometry(QtCore.QRect(50, 110, 85, 22))
    self.pushButton1.setObjectName("pushButton1")
    self.pushButton2 = QtWidgets.QPushButton(Form)
    self.pushButton2.setGeometry(QtCore.QRect(150, 110, 85, 22))
    self.pushButton2.setObjectName("pushButton2")
    self.tableWidget = QtWidgets.QTableWidget(Form)
    self.tableWidget.setEnabled(True)
    self.tableWidget.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)  # Make table not editable
    self.tableWidget.setGeometry(QtCore.QRect(25, 151, 881, 471))
    self.tableWidget.setObjectName("tableWidget")
    self.tableWidget.setColumnCount(4)
    self.tableWidget.setRowCount(38)
    self.col_headers = ['الرتبة', 'الإسم', 'رصيد سنوية', 'رصيد عارضة']
    self.tableWidget.setHorizontalHeaderLabels(self.col_headers)
    self.tableWidget.setLayoutDirection(QtCore.Qt.RightToLeft)
    header = self.tableWidget.horizontalHeader()
    header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
    header.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
    header.setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
    self.comboBox = QtWidgets.QComboBox(Form)
    self.comboBox.setGeometry(QtCore.QRect(728, 60, 121, 22))
    self.comboBox.setEditable(False)
    self.comboBox.setObjectName("comboBox")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox.addItem("")
    self.comboBox_2 = QtWidgets.QComboBox(Form)
    self.comboBox.setLayoutDirection(QtCore.Qt.RightToLeft)
    self.comboBox_2.setLayoutDirection(QtCore.Qt.RightToLeft)
    self.comboBox_2.setGeometry(QtCore.QRect( 348, 60, 311, 22))
    self.comboBox_2.setEditable(False)
    self.comboBox_2.setCurrentText("")
    self.comboBox_2.setObjectName("comboBox_2")
    self.tableWidget.raise_()
    self.pushButton.raise_()
    self.comboBox.raise_()
    self.comboBox_2.raise_()
    self.set_combo()
    self.comboBox.currentIndexChanged.connect(self.set_combo)
    self.pushButton.clicked.connect(self.open_csv)
    self.retranslateUi(Form)
    self.comboBox.setCurrentIndex(0)
    QtCore.QMetaObject.connectSlotsByName(Form)

def open_csv(self):
    with open(self.fname , 'r') as record :
        for row_data in csv.reader(record):
            row = self.tableWidget.rowCount()
            self.tableWidget.insertRow(row)
            for col , data in enumerate(row_data):
                item = QtGui.QTextTableCellFormat(data)
                self.tableWidget.setItem( row , col, item)

def search(self):
    print 'search'

def set_combo(self):
    self.comboBox_2.clear()
    x = self.comboBox.currentIndex()
    self.comboBox_2.addItems(self.combo_data2[x])
    print x
    print type(x)

def retranslateUi(self, Form):
    _translate = QtCore.QCoreApplication.translate
    Form.setWindowTitle(_translate("Form", "بيانات الضباط"))
    self.pushButton.setText(_translate("Form", "بحث"))
    self.pushButton1.setText(_translate("Form", "خصم عارضة"))
    self.pushButton2.setText(_translate("Form", "خصم سنوية"))
    self.comboBox.setToolTip(_translate("Form", "<html><head/><body><p>الرتبة</p></body></html>"))
    self.comboBox.setCurrentText(_translate("Form", "الرتبة"))
    self.comboBox_2.setCurrentText(_translate("Form", "الإسم"))
    self.comboBox.setItemText(0, _translate("Form", "عميد"))
    self.comboBox.setItemText(1, _translate("Form", "عقيد"))
    self.comboBox.setItemText(2, _translate("Form", "مقدم"))
    self.comboBox.setItemText(3, _translate("Form", "رائد"))
    self.comboBox.setItemText(4, _translate("Form", "نقيب"))
    self.comboBox.setItemText(5, _translate("Form", "ملازم أول"))
    self.comboBox.setItemText(6, _translate("Form", "ملازم"))
    self.comboBox_2.setToolTip(_translate("Form", "<html><head/><body><p>الإسم</p></body></html>"))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

I do not understand why you use QTextTableCellFormat , QTableWidget expects a QTableWidgetItem : 我不明白为什么您使用QTextTableCellFormatQTableWidget需要一个QTableWidgetItem

def open_csv(self):
    self.tableWidget.setRowCount(0)
    with open(self.fname , 'r') as record :
        for row_data in csv.reader(record):
            row = self.tableWidget.rowCount()
            self.tableWidget.insertRow(row)
            for col , data in enumerate(row_data):
                item = QtWidgets.QTableWidgetItem(data)
                self.tableWidget.setItem( row , col, item)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM