如何从QLineEdit()获取int?

2024-10-01 17:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,我尝试了很多方法来更改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函数和设置轴限制的不同方式,但总是出现这种错误


Tags: fromimportselfeventrangeaxptscanvas
1条回答
网友
1楼 · 发布于 2024-10-01 17:29:24

您不应该使用QLineEdit获取数字,而应该使用通过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)

相关问题 更多 >

    热门问题