Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt5] Saber que valor selecciono el usuario en combobox
#1
Information 
Soy nuevo usando PyQt5, y tengo este problema:
Tengo este combobox:

Código:
  1. class RenderWindow(QMainWindow):
  2.    def __init__(self, parent=None):
  3.        super(RenderWindow, self).__init__(parent)
  4.  
  5.        self.setWindowTitle("Render video")
  6.        centralWidget = QWidget(self)          
  7.        self.setCentralWidget(centralWidget)  
  8.  
  9.        # Create combobox and add items.
  10.        self.comboBox = QComboBox(centralWidget)
  11.        self.comboBox.setGeometry(QRect(10, 10, 150, 30))
  12.        self.comboBox.setObjectName(("comboBox"))
  13.        self.comboBox.addItem("Full HD (1920p x 1080p)", 23)
  14.        self.comboBox.addItem("HD (1280p x 720)")
  15.        self.comboBox.addItem("SD (640 x 480)")
  16.  
  17.        self.resize(350, 250)
  18.        self.setFixedSize(self.size())
Como haría para saber que opción selecciono el usuario en el combobox?
Saludos
Responder
#2
Hola. Los métodos currentIndex() y currentText() retornan el índice de la opción seleccionada o bien su texto.

Saludos
Responder
#3
(28-08-2018, 11:23 PM)Francisco escribió: Hola. Los métodos currentIndex() y currentText() retornan el índice de la opción seleccionada o bien su texto.

Saludos

y como haría para añadir un radiobutton? y como añado texto a la ventana?
Disculpe mi ignorancia, la mayoría de lo que encuentro en internet es para pyqt4.
Responder
#4
Esas cuestiones son idénticas en PyQt 5, únicamente cambian el modo en que se importan las clases (de PyQt4.QtGui a PyQt5.QtWidgets).

Las clases para esos controles son QRadioButton y QLabel.
Responder
#5
(29-08-2018, 08:25 PM)Francisco escribió: Esas cuestiones son idénticas en PyQt 5, únicamente cambian el modo en que se importan las clases (de PyQt4.QtGui a PyQt5.QtWidgets).

Las clases para esos controles son QRadioButton y QLabel.

Pues aca está mi código para crear un radiobutton y no muestra nada:

Código:
  1. from PyQt5 import *
  2. from PyQt5.QtCore import *
  3. from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
  4. from PyQt5.QtMultimediaWidgets import QVideoWidget
  5. from PyQt5.QtWidgets import *
  6. from PyQt5.QtGui import *
  7. import sys
  8.  
  9. class OptionsWindow(QMainWindow):
  10.    def __init__(self, parent=None):
  11.        super(OptionsWindow, self).__init__(parent)
  12.        self.setWindowTitle("Video")
  13.  
  14.        layout = QHBoxLayout()
  15.        self.b1 = QRadioButton("Button1")
  16.        self.b1.setChecked(True)
  17.        self.b1.toggled.connect(lambda:self.btnstate(self.b1))
  18.        layout.addWidget(self.b1)
  19.        
  20.        self.b2 = QRadioButton("Button2")
  21.        self.b2.toggled.connect(lambda:self.btnstate(self.b2))
  22.  
  23.        layout.addWidget(self.b2)
  24.        self.setLayout(layout)        
  25.        def btnstate(self,b):
  26.    
  27.            if b.text() == "Button1":
  28.                if b.isChecked() == True:
  29.                    print(b.text()+" is selected")
  30.                else:
  31.                    print(b.text()+" is deselected")
  32.                
  33.            if b.text() == "Button2":
  34.                if b.isChecked() == True:
  35.                    print(b.text()+" is selected")
  36.                else:
  37.                    print(b.text()+" is deselected")
  38.  
  39.  
  40. if __name__ == '__main__':
  41.     app = QApplication(sys.argv)
  42.     op = OptionsWindow()
  43.     op.show()
  44.     sys.exit(app.exec_())
Responder
#6
Hay varios errores en tu código. En primer lugar, estás definiendo btnstate() dentro del método __init__(), lo cual arrojará un error. Segundo, habrás visto en la consola que Qt se está quejando por tu llamada a self.setLayout(layout). Para evitar esto primero tienes que crear un widget dentro de la ventana, y luego establecer el layout dentro de él.

  1. class OptionsWindow(QMainWindow):
  2. def __init__(self, parent=None):
  3. super(OptionsWindow, self).__init__(parent)
  4. self.setWindowTitle("Video")
  5. self.widget = QWidget(self)
  6.  
  7. layout = QHBoxLayout()
  8. self.b1 = QRadioButton("Button1")
  9. self.b1.setChecked(True)
  10. self.b1.toggled.connect(lambda: self.btnstate(self.b1))
  11. layout.addWidget(self.b1)
  12.  
  13. self.b2 = QRadioButton("Button2")
  14. self.b2.toggled.connect(lambda: self.btnstate(self.b2))
  15.  
  16. layout.addWidget(self.b2)
  17. self.widget.setLayout(layout)
  18. self.setCentralWidget(self.widget)
  19.  
  20. def btnstate(self,b):
  21. if b.text() == "Button1":
  22. if b.isChecked() == True:
  23. print(b.text()+" is selected")
  24. else:
  25. print(b.text()+" is deselected")
  26. if b.text() == "Button2":
  27. if b.isChecked() == True:
  28. print(b.text()+" is selected")
  29. else:
  30. print(b.text()+" is deselected")


Te recomiendo que leas algún tutorial sobre Qt para que puedas asir estas cuestiones básicas. También te podés guiar por los distintos programas que hicimos en Recursos Python usando PyQt: https://recursospython.com/tag/pyqt/.

Saludos
Responder
#7
(29-08-2018, 11:18 PM)Francisco escribió: Hay varios errores en tu código. En primer lugar, estás definiendo btnstate() dentro del método __init__(), lo cual arrojará un error. Segundo, habrás visto en la consola que Qt se está quejando por tu llamada a self.setLayout(layout). Para evitar esto primero tienes que crear un widget dentro de la ventana, y luego establecer el layout dentro de él.

  1. class OptionsWindow(QMainWindow):
  2.    def __init__(self, parent=None):
  3.        super(OptionsWindow, self).__init__(parent)
  4.        self.setWindowTitle("Video")
  5.        self.widget = QWidget(self)
  6.        
  7.        layout = QHBoxLayout()
  8.        self.b1 = QRadioButton("Button1")
  9.        self.b1.setChecked(True)
  10.        self.b1.toggled.connect(lambda<img src="https://foro.recursospython.com/images/smilies/confused.png" alt="Confused" title="Confused" class="smilie smilie_13" />elf.btnstate(self.b1))
  11.        layout.addWidget(self.b1)
  12.        
  13.        self.b2 = QRadioButton("Button2")
  14.        self.b2.toggled.connect(lambda<img src="https://foro.recursospython.com/images/smilies/confused.png" alt="Confused" title="Confused" class="smilie smilie_13" />elf.btnstate(self.b2))
  15.  
  16.        layout.addWidget(self.b2)
  17.        self.widget.setLayout(layout)    
  18.        self.setCentralWidget(self.widget)
  19.            
  20.    def btnstate(self,b):
  21.        if b.text() == "Button1":
  22.            if b.isChecked() == True:
  23.                print(b.text()+" is selected")
  24.            else:
  25.                print(b.text()+" is deselected")
  26.        if b.text() == "Button2":
  27.            if b.isChecked() == True:
  28.                print(b.text()+" is selected")
  29.            else:
  30.                print(b.text()+" is deselected")


Te recomiendo que leas algún tutorial sobre Qt para que puedas asir estas cuestiones básicas. También te podés guiar por los distintos programas que hicimos en Recursos Python usando PyQt: https://recursospython.com/tag/pyqt/.

Saludos
Gracias, sugiero que hagas un tutorial para PyQt5, ya que he encontrado pocos y no son muy claros. Hay uno en español, pero usa Qt Designer, y por más raro que suene, prefiero hacer todo en código envés de usar un editor WYSIWYG.
Saludos
Responder
#8
Efectivamente un tutorial de PyQt es una tarea pendiente, lo tendré en cuenta!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)