es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener la variable x, que es la longitud de los caracteres de entrada de un campo html, en la función mousePressEvent?

¿Cómo puedo acceder a la variable x, que es la longitud de los caracteres de entrada de un campo de entrada de HTML, dentro de la función mousePressEvent?
Y la variable x es una variable dinámica que aumenta con la longitud de cada carácter.
Quiero controlar las dimensiones de entrada de texto dentro de mousePressEvent.
Pero no puedo acceder a la variable x.

import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, QtWebChannel

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.x = 50
        self.setGeometry(300, 200, 800, 600)
        self.channel = QtWebChannel.QWebChannel(self)
        self.channel.registerObject("backend", self)
        self.show()

    @QtCore.pyqtSlot(str)
    def pyFun1(self, x):
        self.x = x
        print(self.x)

    def mousePressEvent(self, e):
        self.view = QtWebEngineWidgets.QWebEngineView(self)
        self.view.resize(self.x, 40)
        self.view.page().setWebChannel(self.channel)
        self.view.load(QtCore.QUrl().fromLocalFile(
            os.path.split(os.path.abspath(__file__))[0]+r'\index.html'))
        self.view.move(QPoint(e.x(), e.y()))
        self.view.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a la variable x, debes convertirla en una variable de instancia definiéndola en la función init() como self.x. Luego, puedes acceder a ella en la función mousePressEvent() usando self.x. Dado que la variable x es dinámica y cambia con los caracteres de entrada, puedes actualizarla en la función pyFun1() usando self.x = x. Aquí está el código actualizado:

    import sys
    import os
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, QtWebChannel
    
    class MainWindow(QMainWindow):
        def __init__(self, *args, **kwargs):
            super(MainWindow, self).__init__(*args, **kwargs)
            self.x = 50
            self.setGeometry(300, 200, 800, 600)
            self.channel = QtWebChannel.QWebChannel(self)
            self.channel.registerObject("backend", self)
            self.show()
    
        @QtCore.pyqtSlot(str)
        def pyFun1(self, x):
            self.x = len(x) * 10 # actualizar la variable x basada en la longitud de la entrada
            print(self.x)
    
        def mousePressEvent(self, e):
            self.view = QtWebEngineWidgets.QWebEngineView(self)
            self.view.resize(self.x, 40)
            self.view.page().setWebChannel(self.channel)
            self.view.load(QtCore.QUrl().fromLocalFile(
                os.path.split(os.path.abspath(__file__))[0] + r'\index.html'))
            self.view.move(QPoint(e.x(), e.y()))
            self.view.show()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MainWindow()
        window.show()
        sys.exit(app.exec_())
    

    En este código actualizado, la variable x se actualiza en la función pyFun1() en función de la longitud de los caracteres de entrada, y luego se utiliza para cambiar el tamaño del campo de entrada de texto en la función mousePressEvent().

Comments are closed.