【问题标题】:How to get int from QLineEdit()?如何从 QLineEdit() 获取 int?
【发布时间】:2020-01-16 22:46:52
【问题描述】:

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

TypeError:“QLineEdit”和“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 函数以及设置轴限制的不同方式,但总是出现这个错误。

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    你不应该使用QLinEdit来获取数字,而是通过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)

    【讨论】:

    • 谢谢,以后我会记住的!
    猜你喜欢
    • 2012-08-23
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多