Pyqt5 中的 LineEdit

Posted

技术标签:

【中文标题】Pyqt5 中的 LineEdit【英文标题】:LineEdit in Pyqt5 【发布时间】:2017-04-05 09:44:02 【问题描述】:

我想使用 pyqt5 来修改我的文档。

在界面中输入一些信息(例如,IP ...等)

然后用这些变量替换原来的例子信息

但是输入的值并没有出现在文件中

文件显示“无”

如果设置

 ip = self.lineEdit_ip.text()

文件显示''

这是我的代码

import sys, os  
import platform

from PyQt5.QtWidgets import *
import ezplan_form
from ezplan_form import Ui_MainWindow

if platform.system() == 'Windows':
    ezPath = os.path.join('F:\\','plan')
else:
    ezPath = os.path.join('F','plan')

class MyForm(QMainWindow, Ui_MainWindow):

    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowTitle('SetezPlan')
        self.SetIP()

    def SetIP(self):
        ip = str(self.lineEdit_ip.text())

        f=open(os.path.join(ezPath,'Server.txt'),'r+')  
        flist=f.readlines()  
        flist[0]= ip
        f=open(os.path.join(ezPath,'Server.txt'),'w+')  
        f.writelines(flist)
        self.pushButton_ok.clicked.connect(f.close)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myform = MyForm()
    myform.show()
    sys.exit(app.exec_())

如何修改我的代码??

*更新(04/06) @kamik423 结果像图像。不是“6.6.6.6”。

【问题讨论】:

首先(从我看来)你只在窗口打开时调用SetIP(),而不是在你写东西的时候。其次,一旦按下按钮,我只会写入文件。第三,您可以删除f=open(os.path.join(ezPath,'Server.txt'),'w+') 行,因为该文件已经打开以供写入。 谢谢!当我在界面中写东西时,我该怎么做才能保存修改? 【参考方案1】:

我们可以使用editingFinished信号,这是在放置文本并按下EnterReturn后执行的,即放置所需文本然后按下EnterReturn

def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.setWindowTitle('SetezPlan')
    self.SetIP()
    self.lineEdit_ip.editingFinished.connect(self.SetIP)

def SetIP(self, event):
    ip = str(self.lineEdit_ip.text())
    with open(os.path.join(ezPath,'Server.txt'),'r+') as f:
        flist=f.readlines()  
        flist[0]= ip
        f.writelines(flist)
    f.close()

【讨论】:

感谢您的帮助!它成功了。【参考方案2】:

解决方案(未测试,因为我没有程序的其余部分) 现在每次在lineEdit 中输入或删除符号时都会调用SetIP。它打开文件,写入第一行并再次保存。现在按钮是不必要的(据我所知)

def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.setWindowTitle('SetezPlan')
    self.lineEdit_ip.textChanged.connect(self.SetIP)

def SetIP(self, event):
    ip = str(self.lineEdit_ip.text())
    with open(os.path.join(ezPath,'Server.txt'),'r+') as f:
        flist=f.readlines()  
        flist[0]= ip
        f.writelines(flist)
    f.close()

【讨论】:

感谢您的帮助!我试过你的代码但失败了。 我改变了一些东西,你能再试一次。你的错误是什么?文件存在吗? 我的问题解决了!我使用self.lineEdit_ip.editingFinished.connect(self.SetIP) 来解决这个问题。感谢您的帮助! 是的,但这只会在您取消选择文本字段后保存,而不是在您输入文本时保存。

以上是关于Pyqt5 中的 LineEdit的主要内容,如果未能解决你的问题,请参考以下文章

将数据从散点图传输到 lineEdit - Matplotlib 和 Pyqt5

PyQt5:添加lineEdit的子类QSlider(用于在QtDesigner中提升)?

PyQt5快速上手基础篇4-将lineEdit输入框数据同步显示再label和LCD屏上面

PyQt5 - 使用 Line Edit 从编辑窗口更新标签

在Qt编程在lineEdit中输入完内容后点击pushbutton并在TextBrowser显示lineEdit中的内容

PyQt5 技术篇-plainTextEdit控件获得文本内容方法设置文本内容方法。