生成文本文件的多个问题

Multiple problems generating a text file

我正在制作我的第一个 Pyqt 界面,使用“设计器”和 Python 配置 it.The 函数 def clickconector return 表单填写和 def radio_value return 如果作业未决或已完成(“pendiente”或“terminado”)。 clickconectorradio_value* 函数写得正确,但我对 def text_file 函数有问题。

问题#1:出于某种原因,生成的文件内部与标题相同,如果 radio_value 函数会出现,因为它指定在算法是另一个函数 clickconector.

问题#2: 标题没有按照我的要求写。我得到这个:('Terminado', 'MT16'). txt,(它在标题中写 .txt)。 什么时候应该是:Terminado MT16。此外,文件类型在我看来不是 .txt,我必须 select 才能用鼠标这样打开它

def clickconector (self):
    relleno = [self.bitacora.text(), self.turno.text(), self.asesor.text(), self.item.text(), self.modelo.text(), self.identificacion.text(), self.rig.text(),self.horometro.text(),self.condicion.text(),self.orden.text(), self.observacion.text()]
    form_label = ["bitacora", 'turno', 'asesor', 'item', 'modelo', 'identificacion', 'rig', 'horometro', 'condicion', 'orden', 'observacion']
    for a,b in zip (form_label, relleno):
        return (a,b)
        
def radio_value (self):
    if self.pendiente.isChecked():     
        return 'Pendiente' , self.bitacora.text()
    
    if self.terminado.isChecked():
        return'Terminado', self.bitacora.text()

def text_file (self):
    Bloc_title= self.radio_value()
    f = open(str(Bloc_title)+'. txt', 'w')
    f.write(str(self.clickconector()))   
    return f       

问题 2,

这里有几个小问题,您将文件扩展名设为 . txt,这应该是 .txt。注意额外的 space.

你的 Bloc_title 是一个列表,所以你在标题中得到了一个数组,你需要增加这个数组的部分,它的长度总是 2 所以你可以执行以下操作,

def text_file (self):
    Bloc_title = self.radio_value()
    f = open(Bloc_title[0] + ' ' + str(Bloc_title[1] + '.txt', 'w')
    f.write(str(self.clickconector()))   
    return f       

请注意,可能不需要 str 调用,但我不确定 self.bitacora.text() 返回的数据类型。

来自评论的回答, 如果您想要来自 relleno 的所有元素,并且只想要来自 form_label 的第一个元素,我建议修改 clickconnector()

def clickconector (self):
    relleno = [self.bitacora.text(), self.turno.text(), self.asesor.text(), self.item.text(), self.modelo.text(), self.identificacion.text(), self.rig.text(),self.horometro.text(),self.condicion.text(),self.orden.text(), self.observacion.text()]
    form_label = ["bitacora", 'turno', 'asesor', 'item', 'modelo', 'identificacion', 'rig', 'horometro', 'condicion', 'orden', 'observacion']
    return [form_label[0]] + relleno

radio_value 的 return 类型是 tuple。您正在将元组转换为字符串,因此它将以 tuple 的形式打印,即 "(value_a, value_b, value_c)" 而不是 value_a value_b value_c。您可以使用 join 将元组的每个值与 space 连接起来,如下所示:

" ".join(self.radio_value())

您还在 f = open(str(Bloc_title)+'. txt', 'w') 中写了 ". txt" 而不是 ".txt"。这就是 . txt 在文件名中的原因。考虑到所有这些,您的 text_file 函数应如下所示:

def text_file(self):
    filename = f"{' '.join(self.radio_value())}.txt"
    with open(filename, "w") as f:
        f.write(" ".join(self.clickconnector()))
        return f

请注意 with/open 而不是 open。强烈建议使用 with/open 以提高可读性和整体 ease-of-use.