Python 更改值,但新值会覆盖上一个值

Python 更改值,但新值会覆盖上一个值,python,python-3.x,pyqt5,label,Python,Python 3.x,Pyqt5,Label,我有一个按钮,可以加载文件系统并从文件的位置写入标签,但当我再次按下按钮时,程序会覆盖标签。我已尝试更新()、替换()等操作失败。请遵循以下我的代码: def btnLoadXML_click(self): options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog fileName, _ = QFileDialog.getOpenFileName(self, "QFil

我有一个按钮,可以加载文件系统并从文件的位置写入标签,但当我再次按下按钮时,程序会覆盖标签。我已尝试更新()、替换()等操作失败。请遵循以下我的代码:

def btnLoadXML_click(self):

    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    fileName, _ = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
                                              "XML Files (*.xml);;All Files (*)", options=options)
    global dom, NameFile

    if fileName:
        print(fileName)
        NameFile = fileName
    dom = ET.parse(fileName)
    ########label here
    labelXMLFile = QLabel(NameFile, self)
    labelXMLFile.setStyleSheet('QLabel {font:bold;font-size:20px}')
    labelXMLFile.resize(800, 50)
    labelXMLFile.move(300, 50)
    labelXMLFile.show()

问题在于每次更新文本时都会创建一个新的QLabel,因此您会看到这种行为,而只需在构造函数中创建一个QLabel并更新文本:

def\uuuuu初始化(self,…):
# ...
self.labelXMLFile=QLabel(self)
self.labelXMLFile.setStyleSheet('QLabel{font:bold;font size:20px}'))
self.labelXMLFile.move(300,50)
self.labelXMLFile.show()文件
def btnLoadXML_单击(自身):
# ...
########在这里贴标签
self.labelXMLFile.setText(NameFile)
self.labelXMLFile.adjusSize()

注意:不建议滥用

中指出的全局变量。问题是每次更新文本时都要创建一个新的QLabel,因此可以看到这种行为,而只需在构造函数中创建一个QLabel并更新文本:

def\uuuuu初始化(self,…):
# ...
self.labelXMLFile=QLabel(self)
self.labelXMLFile.setStyleSheet('QLabel{font:bold;font size:20px}'))
self.labelXMLFile.move(300,50)
self.labelXMLFile.show()文件
def btnLoadXML_单击(自身):
# ...
########在这里贴标签
self.labelXMLFile.setText(NameFile)
self.labelXMLFile.adjusSize()

注意:不建议滥用全局变量,如

中所示。我正在使用全局变量,因为我需要在其他函数中使用它。。。。。。它不起作用。。。系统返回我:进程已完成,退出代码为-1073740791(0xC0000409)@FelipeClemente 1)我认为您的实现不正确,因此如果您需要更多帮助,请提供帮助。我建议在CMD或控制台中运行脚本,以获得更具描述性的错误消息,而不仅仅是数字代码。2) 为什么不使用类的属性或将其作为参数传递?全局变量的最大问题是,如果出现错误,它们会生成难以调试的无声错误。“我使用全局变量是因为我需要在其他函数中使用它”正是使用类和实例的主要原因之一。例如,不使用
全局dom;dom=ET.parse(文件名)
,使用
self.dom=ET.parse(文件名)
,然后您可以从该类实例中的任何位置访问
self.dom
,或者只要您有权访问该实例,就可以从任何其他位置访问该实例:如果该实例是
myWindow
,那么它就是
myWindow.dom
。如果您没有访问该实例的权限,那么问题就出现在您的项目结构中,不应该通过使用globals来解决。thx各位,我已经按照您的建议解决了问题。。。just self.labelXMLFile.adjusSize()不适用于我,我使用全局变量,因为我需要在其他函数中使用它。。。。。。它不起作用。。。系统返回我:进程已完成,退出代码为-1073740791(0xC0000409)@FelipeClemente 1)我认为您的实现不正确,因此如果您需要更多帮助,请提供帮助。我建议在CMD或控制台中运行脚本,以获得更具描述性的错误消息,而不仅仅是数字代码。2) 为什么不使用类的属性或将其作为参数传递?全局变量的最大问题是,如果出现错误,它们会生成难以调试的无声错误。“我使用全局变量是因为我需要在其他函数中使用它”正是使用类和实例的主要原因之一。例如,不使用
全局dom;dom=ET.parse(文件名)
,使用
self.dom=ET.parse(文件名)
,然后您可以从该类实例中的任何位置访问
self.dom
,或者只要您有权访问该实例,就可以从任何其他位置访问该实例:如果该实例是
myWindow
,那么它就是
myWindow.dom
。如果您没有访问该实例的权限,那么问题就出现在您的项目结构中,不应该通过使用globals来解决。thx各位,我已经按照您的建议解决了问题。。。just self.labelXMLFile.adjusSize()对我不起作用