如何从 QLineEdit 访问值?
Posted
技术标签:
【中文标题】如何从 QLineEdit 访问值?【英文标题】:How do I access the value from a QLineEdit? 【发布时间】:2021-01-20 02:07:23 【问题描述】:如何获取和存储写入 QLineEdit 中的值以及单击保存后关闭小部件?我查看了 PyQt5 文档,它说函数 .text() 将允许访问 QLineEdit 中的值,但由于某种原因,我不断获得的值是默认的空字符串。
class ImageSettingsWindow(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setWindowTitle("Image Settings")
self.setFixedWidth(250)
self.setFixedHeight(300)
allImg_checkBox = QCheckBox("All Images")
lastImg_checkBox = QCheckBox("Last Image")
timedImgs_checkBox = QCheckBox("Timed Images")
start_label = QLabel("Start Duration:")
txt_start = QLineEdit()
self.data_start = txt_start.ui.text()
end_label = QLabel("End Duration:")
txt_end = QLineEdit()
self.data_end = txt_end.ui.text()
timeInt_label = QLabel("Time Interval:")
txt_timeInt = QLineEdit()
self.data_timeint = txt_timeInt.ui.text()
maxDiff_label = QLabel("Max Difference:")
txt_maxDiff = QLineEdit()
self.data_maxdiff = txt_maxDiff.ui.txt()
buttonSave = QPushButton("Save")
layout.addWidget(allImg_checkBox)
layout.addWidget(lastImg_checkBox)
layout.addWidget(timedImgs_checkBox)
layout.addWidget(start_label)
layout.addWidget(txt_start)
layout.addWidget(end_label)
layout.addWidget(txt_end)
layout.addWidget(timeInt_label)
layout.addWidget(txt_timeInt)
layout.addWidget(maxDiff_label)
layout.addWidget(txt_maxDiff)
layout.addWidget(buttonSave)
print(self.data_start)
self.setLayout(layout)
buttonSave.clicked.connect(self.clickedSave)
def clickedSave(self):
#data_start = self.
print("button")
try:
json_image = open("config/image.json","r")
param = json.load(json_image)
json_image.close()
param["start_duration"] = int(self.data_start)
param["end_duration"] = int(self.data_end)
param["time_interval"] = float(self.data_timeint)
param["max_diff"] = int(self.data_maxdiff)
json_image = open("config/image.json", "w")
json.dump(param,json_image)
json_image.close()
except IOError as err :
print("Error writing the image.json file , please double check")
【问题讨论】:
【参考方案1】:问题是你在构建窗口时获取文本,所以用户无法与GUI交互,而是必须在clickedSave中获取信息。
另一方面,我看到这段代码永远无法执行(这与失败不同),因为除了类似的错误(错别字)之外,没有 QLineEdit 具有“ui”属性,所以请尝试提供更好的代码下次再来。
class ImageSettingsWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Image Settings")
self.setFixedSize(250, 300)
allImg_checkBox = QCheckBox("All Images")
lastImg_checkBox = QCheckBox("Last Image")
timedImgs_checkBox = QCheckBox("Timed Images")
start_label = QLabel("Start Duration:")
self.txt_start = QLineEdit()
end_label = QLabel("End Duration:")
self.txt_end = QLineEdit()
timeInt_label = QLabel("Time Interval:")
self.txt_timeInt = QLineEdit()
maxDiff_label = QLabel("Max Difference:")
self.txt_maxDiff = QLineEdit()
buttonSave = QPushButton("Save")
layout = QVBoxLayout(self)
layout.addWidget(allImg_checkBox)
layout.addWidget(lastImg_checkBox)
layout.addWidget(timedImgs_checkBox)
layout.addWidget(start_label)
layout.addWidget(self.txt_start)
layout.addWidget(end_label)
layout.addWidget(self.txt_end)
layout.addWidget(timeInt_label)
layout.addWidget(self.txt_timeInt)
layout.addWidget(maxDiff_label)
layout.addWidget(self.txt_maxDiff)
layout.addWidget(buttonSave)
buttonSave.clicked.connect(self.clickedSave)
def clickedSave(self):
try:
param = dict()
with open("config/image.json", "r") as json_image:
param = json.load(json_image)
param["start_duration"] = int(self.txt_start.text())
param["end_duration"] = int(self.txt_end.text())
param["time_interval"] = float(self.txt_timeInt.text())
param["max_diff"] = int(self.txt_maxDiff.text())
with open("config/image.json", "w") as json_image:
json.dump(param, json_image)
except IOError as err:
print("Error writing the image.json file , please double check", err)
【讨论】:
以上是关于如何从 QLineEdit 访问值?的主要内容,如果未能解决你的问题,请参考以下文章
Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?
更新从读取字典的 for 循环生成的 QLineEdit 文本框中的文本
如何从 Qt Objects(qlineedit,qcombobox) 中获取?