gpt4 book ai didi

python - 如何从 QLineEdit() 获取 int?

转载 作者:行者123 更新时间:2023-12-01 06:33:33 25 4
gpt4 key购买 nike

这是我的代码,我尝试了很多方法来更改 QLineEdit 的输入,但没有任何效果,我唯一得到的是

TypeError: '>' not supported between instances of 'QLineEdit' and 'QLineEdit'

from matplotlib import pyplot
import numpy as np
from PyQt5.QtWidgets import (QWidget, QPushButton,
QLabel, QGridLayout,
QLineEdit, QApplication,
QListWidget, QListWidgetItem)
from PyQt5.QtGui import QIntValidator, QRegExpValidator

import sys


class Program(QWidget):

def __init__(self):
super().__init__()

self.x_pts = []
self.y_pts = []

self.fig, self.ax = pyplot.subplots()
self.points, = self.ax.plot(self.x_pts, self.y_pts, marker="o", linestyle="")

self.label1 = QLabel('Rozpocznij wyznaczanie' + 2*'')
self.button1 = QPushButton('Start')
self.label2 = QLabel('Wprowadź zakres x')
self.label3 = QLabel('Wprowadź zakres y')
self.label4 = QLabel('Od')
self.label5 = QLabel('Do')
self.label6 = QLabel('Od')
self.label7 = QLabel('Do')
self.range_from1 = QLineEdit()
self.range_to1 = QLineEdit()
self.range_from2 = QLineEdit()
self.range_to2 = QLineEdit()
self.onlyInt = QIntValidator(-100, 100)
self.range_from1.setValidator(QRegExpValidator(
QRegExp('^(-(100|([1-9]{1}[0-9]{1})|[1-9]{1}))|(0)$')))
self.range_from2.setValidator(self.onlyInt)
self.range_to1.setValidator(QRegExpValidator(
QRegExp('^(-(100|([1-9]{1}[0-9]{1})|[1-9]{1}))|(0)$')))
self.range_to2.setValidator(self.onlyInt)

self.ax.set_ylim(self.range_from2, self.range_to2)

siatka = QGridLayout()
siatka.setSpacing(10)

siatka.addWidget(self.label1, 0, 0)
siatka.addWidget(self.label2, 1, 0)
siatka.addWidget(self.label4, 2, 0)
siatka.addWidget(self.range_from1, 2, 1)
siatka.addWidget(self.label5, 3, 0)
siatka.addWidget(self.range_to1, 3, 1)
siatka.addWidget(self.label3, 4, 0)
siatka.addWidget(self.label6, 5, 0)
siatka.addWidget(self.range_from2, 5, 1)
siatka.addWidget(self.label7, 6, 0)
siatka.addWidget(self.range_to2, 6, 1)
siatka.addWidget(self.button1, 7, 0)

self.setLayout(siatka)

self.button1.clicked.connect(self.showing_canvas)

self.show()

def wyznaczanie(self, event):
m_x, m_y = event.x, event.y
x, y = self.ax.transData.inverted().transform([m_x, m_y])
self.x_pts.append(x)
self.y_pts.append(y)
self.points.set_xdata(self.x_pts)
self.points.set_ydata(self.y_pts)
self.fig.canvas.draw()

def showing_canvas(self):
self.fig.canvas.mpl_connect('button_press_event', self.wyznaczanie)
pyplot.show()


if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Program()
sys.exit(app.exec_())

我想按照用户的意愿设置轴限制,但我不知道发生了什么。我尝试的是 QRegValidator,通过使用 int 函数、float 函数以及设置轴限制的不同方式,但总是出现此错误。

最佳答案

您不应使用 QInEdit 来获取数字,而应使用通过 text 方法获取的 QLineEdit 中包含的文本。然后使用 int 或 float 方法将其转换为数字。将字符串转换为数字可能会引发错误,例如,如果文本为空,则无法将其转换为数字,等等其他情况,但当您使用验证器时,这会消除除空字符串之外的所有情况,因此它在转换之前必须进行验证。

另一方面,您不应该在构造函数中执行此操作,因为此时 QLineEdit 为空。

def showing_canvas(self):
text1 = self.range_from2.text().replace(",", ".")
text2 = self.range_to2.text().replace(",", ".")
y1 = float(text1) if text1 else 0
y2 = float(text2) if text2 else 0
self.ax.set_ylim(y1, y2)
self.fig.canvas.mpl_connect('button_press_event', self.wyznaczanie)
pyplot.show()

注意:删除self.ax.set_ylim(self.range_from2, self.range_to2)

关于python - 如何从 QLineEdit() 获取 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59778930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com