繁体   English   中英

我想在PyQt的某个列中为csv添加两个lineEdit信息

[英]I want to add two lineEdit info's to csv in a certain column in PyQt

我想将singerLine和titleSong中的某些信息添加到csv中的某个列,我的数据库看起来像这个csv img

我想在单击添加到歌曲按钮时在第3列(歌曲)和第4列(歌手)中添加这些数据。这是我的部分代码(我知道它不对,加上我对pyqt的新内容):

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


class QuitMessage(QtWidgets.QMessageBox):
  def __init__(self):
    QtWidgets.QMessageBox.__init__(self)
    self.setText("Really want to quit?")
    self.addButton(self.No)
    self.addButton(self.Yes)


class musicAdminUI(object):
  def setupUi(self, musicAdmin):
    musicAdmin.setObjectName("musicAdmin")
    musicAdmin.resize(734, 601)
    musicAdmin.setMinimumSize(QtCore.QSize(734, 601))
    musicAdmin.setMaximumSize(QtCore.QSize(734, 601))
    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap("musicIcon.gif"), QtGui.QIcon.Normal, 
    QtGui.QIcon.Off)
    musicAdmin.setWindowIcon(icon)
    self.exitButton = QtWidgets.QPushButton(musicAdmin)
    self.exitButton.setGeometry(QtCore.QRect(650, 565, 75, 23))
    self.exitButton.setObjectName("exitButton")
    self.titleSong = QtWidgets.QLineEdit(musicAdmin)
    self.titleSong.setGeometry(QtCore.QRect(460, 240, 181, 20))
    self.titleSong.setObjectName("titleSong")
    self.singerLine = QtWidgets.QLineEdit(musicAdmin)
    self.singerLine.setGeometry(QtCore.QRect(460, 270, 181, 20))
    self.singerLine.setObjectName("singerLine")
    self.singerLabel = QtWidgets.QLabel(musicAdmin)
    self.singerLabel.setGeometry(QtCore.QRect(370, 270, 47, 13))
    self.singerLabel.setObjectName("singerLabel")
    self.titleLabel = QtWidgets.QLabel(musicAdmin)
    self.titleLabel.setGeometry(QtCore.QRect(370, 240, 47, 13))
    self.titleLabel.setObjectName("titleLabel")
    self.availableSongs = QtWidgets.QPushButton(musicAdmin)
    self.availableSongs.setGeometry(QtCore.QRect(390, 320, 261, 51))
    self.availableSongs.setObjectName("availableSongs")
    self.warningLabel = QtWidgets.QLabel(musicAdmin)
    self.warningLabel.setGeometry(QtCore.QRect(410, 210, 261, 20))
    self.warningLabel.setText("")
    self.warningLabel.setObjectName("warningLabel")

    self.exitButton.clicked.connect(self.CloseThis)
    self.availableSongs.clicked.connect(self.addSong)

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

  def retranslateUi(self, musicAdmin):
    _translate = QtCore.QCoreApplication.translate
    musicAdmin.setWindowTitle(_translate("musicAdmin", "Music Library"))
    self.singerLabel.setText(_translate("musicAdmin", "Singer:"))
    self.titleLabel.setText(_translate("musicAdmin", "Title:"))
    self.exitButton.setText(_translate("AdminUI", "Exit"))
    self.availableSongs.setText(_translate("musicAdmin", "Add Song"))

  def addSong(self):
    warn = QMessageBox()
    voicer = self.singerLine.text()
    title = self.titleSong.text()
    temp = open("musics.csv", "a")
    tempRead = csv.reader(temp)
    song = voicer + ',' + title
    songs = voicer + title

    if songs != '':  # if song has string
        if voicer != '' or title != '':
            temp.write(song + '\n')
            self.warningLabel.setText("Song is added")
        else:
            warn.setWindowTitle("System")
            warn.setText("Song Details are required")
            warn.setIcon(QtWidgets.QMessageBox.Warning)
            warn.exec_()
    else:
        warn.setWindowTitle("System")
        warn.setText("Song Details are required")
        warn.setIcon(QtWidgets.QMessageBox.Warning)
        warn.exec_()

  def CloseThis(self, event):
    reply = QuitMessage().exec_()
    if reply == QtWidgets.QMessageBox.Yes:
        self.musicAdmin.close()

if __name__ == "__main__":
   app = QtWidgets.QApplication(sys.argv)
   musicAdmin = QtWidgets.QDialog()
   ui = musicAdminUI()
   ui.setupUi(musicAdmin)
   musicAdmin.show()
   sys.exit(app.exec_())

要添加新行,我们必须使用接收列表的writerow,根据您的要求,应该只填充第3列和第4列中的数据。为此,我们通过csv创建预定义大小的列表并填写数据。

def addSong(self):
    warn = QMessageBox()
    voicer = self.singerLine.text()
    title = self.titleSong.text()
    temp = open("musics.csv", mode="r", errors='ignore') # ignore mistakes

    reader = csv.reader(temp)
    n_cols = len(next(reader)) #numbers of columns

    temp = open("musics.csv", "a") 
    writer = csv.writer(temp)

    if voicer != '' or title != '':
        data = [""]*n_cols # create a list of empty string
        data[2] = title # add 3 column
        data[3] = voicer # add 4 column
        writer.writerow(data)
        self.warningLabel.setText("Song is added")
    else:
        warn.setWindowTitle("System")
        warn.setText("Song Details are required")
        warn.setIcon(QtWidgets.QMessageBox.Warning)
        warn.exec_()

暂无
暂无

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

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