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:
[code]
class RenderWindow(QMainWindow):
   def __init__(self, parent=None):
       super(RenderWindow, self).__init__(parent)

       self.setWindowTitle("Render video")
       centralWidget = QWidget(self)          
       self.setCentralWidget(centralWidget)  

       # Create combobox and add items.
       self.comboBox = QComboBox(centralWidget)
       self.comboBox.setGeometry(QRect(10, 10, 150, 30))
       self.comboBox.setObjectName(("comboBox"))
       self.comboBox.addItem("Full HD (1920p x 1080p)", 23)
       self.comboBox.addItem("HD (1280p x 720)")
       self.comboBox.addItem("SD (640 x 480)")

       self.resize(350, 250)
       self.setFixedSize(self.size())
[/code]
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
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
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.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
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:
[code]
from PyQt5 import *
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys

class OptionsWindow(QMainWindow):
   def __init__(self, parent=None):
       super(OptionsWindow, self).__init__(parent)
       self.setWindowTitle("Video")

       layout = QHBoxLayout()
       self.b1 = QRadioButton("Button1")
       self.b1.setChecked(True)
       self.b1.toggled.connect(lambda:self.btnstate(self.b1))
       layout.addWidget(self.b1)
       
       self.b2 = QRadioButton("Button2")
       self.b2.toggled.connect(lambda:self.btnstate(self.b2))

       layout.addWidget(self.b2)
       self.setLayout(layout)        
       def btnstate(self,b):
   
           if b.text() == "Button1":
               if b.isChecked() == True:
                   print(b.text()+" is selected")
               else:
                   print(b.text()+" is deselected")
               
           if b.text() == "Button2":
               if b.isChecked() == True:
                   print(b.text()+" is selected")
               else:
                   print(b.text()+" is deselected")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    op = OptionsWindow()
    op.show()
    sys.exit(app.exec_())
[/code]
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.

Código:
class OptionsWindow(QMainWindow):
    def __init__(self, parent=None):
        super(OptionsWindow, self).__init__(parent)
        self.setWindowTitle("Video")
        self.widget = QWidget(self)
        
        layout = QHBoxLayout()
        self.b1 = QRadioButton("Button1")
        self.b1.setChecked(True)
        self.b1.toggled.connect(lambda: self.btnstate(self.b1))
        layout.addWidget(self.b1)
        
        self.b2 = QRadioButton("Button2")
        self.b2.toggled.connect(lambda: self.btnstate(self.b2))

        layout.addWidget(self.b2)
        self.widget.setLayout(layout)    
        self.setCentralWidget(self.widget)
            
    def btnstate(self,b):
        if b.text() == "Button1":
            if b.isChecked() == True:
                print(b.text()+" is selected")
            else:
                print(b.text()+" is deselected")
        if b.text() == "Button2":
            if b.isChecked() == True:
                print(b.text()+" is selected")
            else:
                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
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
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.

Código:
class OptionsWindow(QMainWindow):
   def __init__(self, parent=None):
       super(OptionsWindow, self).__init__(parent)
       self.setWindowTitle("Video")
       self.widget = QWidget(self)
       
       layout = QHBoxLayout()
       self.b1 = QRadioButton("Button1")
       self.b1.setChecked(True)
       self.b1.toggled.connect(lambda:self.btnstate(self.b1))
       layout.addWidget(self.b1)
       
       self.b2 = QRadioButton("Button2")
       self.b2.toggled.connect(lambda:self.btnstate(self.b2))

       layout.addWidget(self.b2)
       self.widget.setLayout(layout)    
       self.setCentralWidget(self.widget)
           
   def btnstate(self,b):
       if b.text() == "Button1":
           if b.isChecked() == True:
               print(b.text()+" is selected")
           else:
               print(b.text()+" is deselected")
       if b.text() == "Button2":
           if b.isChecked() == True:
               print(b.text()+" is selected")
           else:
               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!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)