Python Forum
GUI programming PyQt 5 + Qt Designer
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
GUI programming PyQt 5 + Qt Designer
#1
Dear community,

I'm new to python and I'm trying to generate a GUI with Qt Designer and python.

In the Qt Designer I made a file "Musikauswahl.ui" - it contains labels and radiobuttons.

I want the player of a breakout game (to which I got a lot of help in this forum) to choose the music, which should be played during the game.

I made a GUI from Musikauswahl.ui.

I'm asking politely for help because I'm not experienced in making menus in python...

What I have to do to get the menu appearing?
(If radiobutton is checked, the track "Adeline Yeo (HP) - Kite Fly High.mp3" should be played (it is from https://freemusicarchive.org/)).

Traceback (most recent call last):
  File "D:\Daten\testpyqt\main.py", line 22, in <module>
    form = MyMenu()
  File "D:\Daten\testpyqt\main.py", line 8, in __init__
    super(self).__init__(parent)
TypeError: super() argument 1 must be type, not MyMenu
here is the code I got:
main:
import sys
from PyQt5 import QtGui
import GUI, pygame


class MyMenu(QtGui.QGuiApplication, GUI.Ui_MyMenu):
    def __init__(self, parent=None):
        super(MyMenu, self).__init__(parent)
        self.setupUi(self)
        self.radioButton.clicked.connect(self.play())

    def play(self):
        radiobutton = self.sender()
        if radiobutton.isChecked():
            pygame.mixer.music.load("Adeline Yeo (HP) - Kite Fly High.mp3")
            pygame.mixer.music.set_volume(0.7)
            pygame.mixer.music.play(-1)


if __name__ == '__main__':
    app = QtGui.QGuiApplication(sys.argv)
    form = MyMenu()
    form.show()
    app.exec()
GUI.py
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MyMenu(object):
    def setupUi(self, MyMenu):
        MyMenu.setObjectName("MyMenu")
        MyMenu.resize(800, 469)
        self.centralwidget = QtWidgets.QWidget(MyMenu)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 20, 541, 31))
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 70, 491, 244))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(1)
        self.verticalLayout.setObjectName("verticalLayout")
        self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton.setFont(font)
        self.radioButton.setObjectName("radioButton")
        self.verticalLayout.addWidget(self.radioButton)
        self.radioButton_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_2.setFont(font)
        self.radioButton_2.setObjectName("radioButton_2")
        self.verticalLayout.addWidget(self.radioButton_2)
        self.radioButton_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_3.setFont(font)
        self.radioButton_3.setObjectName("radioButton_3")
        self.verticalLayout.addWidget(self.radioButton_3)
        self.radioButton_4 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_4.setFont(font)
        self.radioButton_4.setObjectName("radioButton_4")
        self.verticalLayout.addWidget(self.radioButton_4)
        self.radioButton_5 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_5.setFont(font)
        self.radioButton_5.setObjectName("radioButton_5")
        self.verticalLayout.addWidget(self.radioButton_5)
        self.radioButton_6 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_6.setFont(font)
        self.radioButton_6.setObjectName("radioButton_6")
        self.verticalLayout.addWidget(self.radioButton_6)
        self.radioButton_7 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(16)
        self.radioButton_7.setFont(font)
        self.radioButton_7.setObjectName("radioButton_7")
        self.verticalLayout.addWidget(self.radioButton_7)
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 320, 471, 121))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(1)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_2.addWidget(self.label_3)
        self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_2.addWidget(self.label_4)
        self.label_5 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_2.addWidget(self.label_5)
        self.label_6 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.verticalLayout_2.addWidget(self.label_6)
        self.label_7 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.verticalLayout_2.addWidget(self.label_7)
        MyMenu.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MyMenu)
        self.statusbar.setObjectName("statusbar")
        MyMenu.setStatusBar(self.statusbar)

        self.retranslateUi(MyMenu)
        QtCore.QMetaObject.connectSlotsByName(MyMenu)

    def retranslateUi(self, MyMenu):
        _translate = QtCore.QCoreApplication.translate
        MyMenu.setWindowTitle(_translate("MyMenu", "MyMenu"))
        self.label.setText(_translate("MyMenu", "Welche Musik soll während des Spiels laufen?"))
        self.radioButton.setText(_translate("MyMenu", "Adeline Yeo (HP) - Kite Fly High"))
        self.radioButton_2.setText(_translate("MyMenu", "Bio Unit - Lights"))
        self.radioButton_3.setText(_translate("MyMenu", "cryptic scenery - Stazione Termini"))
        self.radioButton_4.setText(_translate("MyMenu", "Human Force - Blackout"))
        self.radioButton_5.setText(_translate("MyMenu", "Ketsa - Holding The Line"))
        self.radioButton_6.setText(_translate("MyMenu", "Maarten Schellekens - Salt Lake Swerve"))
        self.radioButton_7.setText(_translate("MyMenu", "Strobotone - Dance Track"))
        self.label_2.setText(_translate("MyMenu", "Musik von:"))
        self.label_3.setText(_translate("MyMenu", "Human Force"))
        self.label_4.setText(_translate("MyMenu", "und"))
        self.label_5.setText(_translate("MyMenu", "https://freemusicarchive.org/"))
        self.label_6.setText(_translate("MyMenu", "Hintergrundbild von:"))
        self.label_7.setText(_translate("MyMenu", "Joshgmit auf Pixabay"))
Reply
#2
And that GUI.py works? Should it be a window?

as window

from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
    
    def setupUi(self):
        self.setObjectName("self")
        self.resize(800, 469)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(10, 20, 541, 31))
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 70, 491, 244))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(1)
        self.verticalLayout.setObjectName("verticalLayout")
        self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton.setFont(font)
        self.radioButton.setObjectName("radioButton")
        self.radioButton.toggled.connect(lambda: self.statusbar.showMessage(self.radioButton.text()))
        self.verticalLayout.addWidget(self.radioButton)
        self.radioButton_2 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_2.setFont(font)
        self.radioButton_2.setObjectName("radioButton_2")
        self.verticalLayout.addWidget(self.radioButton_2)
        self.radioButton_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_3.setFont(font)
        self.radioButton_3.setObjectName("radioButton_3")
        self.verticalLayout.addWidget(self.radioButton_3)
        self.radioButton_4 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_4.setFont(font)
        self.radioButton_4.setObjectName("radioButton_4")
        self.verticalLayout.addWidget(self.radioButton_4)
        self.radioButton_5 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_5.setFont(font)
        self.radioButton_5.setObjectName("radioButton_5")
        self.verticalLayout.addWidget(self.radioButton_5)
        self.radioButton_6 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_6.setFont(font)
        self.radioButton_6.setObjectName("radioButton_6")
        self.verticalLayout.addWidget(self.radioButton_6)
        self.radioButton_7 = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(14)
        self.radioButton_7.setFont(font)
        self.radioButton_7.setObjectName("radioButton_7")
        self.verticalLayout.addWidget(self.radioButton_7)
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 320, 471, 121))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(1)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_2.addWidget(self.label_3)
        self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_2.addWidget(self.label_4)
        self.label_5 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_2.addWidget(self.label_5)
        self.label_6 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.verticalLayout_2.addWidget(self.label_6)
        self.label_7 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(12)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.verticalLayout_2.addWidget(self.label_7)
        self.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.showMessage("Ready")
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
 
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
 
    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("self", "self"))
        self.label.setText(_translate("self", "Welche Musik soll während des Spiels laufen?"))
        self.radioButton.setText(_translate("self", "Adeline Yeo (HP) - Kite Fly High"))
        self.radioButton_2.setText(_translate("self", "Bio Unit - Lights"))
        self.radioButton_3.setText(_translate("self", "cryptic scenery - Stazione Termini"))
        self.radioButton_4.setText(_translate("self", "Human Force - Blackout"))
        self.radioButton_5.setText(_translate("self", "Ketsa - Holding The Line"))
        self.radioButton_6.setText(_translate("self", "Maarten Schellekens - Salt Lake Swerve"))
        self.radioButton_7.setText(_translate("self", "Strobotone - Dance Track"))
        self.label_2.setText(_translate("self", "Musik von:"))
        self.label_3.setText(_translate("self", "Human Force"))
        self.label_4.setText(_translate("self", "und"))
        self.label_5.setText(_translate("self", "https://freemusicarchive.org/"))
        self.label_6.setText(_translate("self", "Hintergrundbild von:"))
        self.label_7.setText(_translate("self", "Joshgmit auf Pixabay"))
        
if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = MainWindow()
    win.setupUi()
    win.setWindowTitle("MainWindow" + "[*]")
    win.show()
    sys.exit(app.exec_())
menator01 likes this post
Reply
#3
Although I don't understand why you don't use pyqt5's mediaplayer instead of pygame.mixer but, maybe something like this

#! /usr/bin/env python3
import sys
from PyQt5.QtWidgets import (QApplication, QGridLayout, QWidget, QRadioButton)
from functools import partial

# Define function for playing mp3 files
def play(track):
    # Check if track is checked
    if track.isChecked():
        # Do pygame mixer stuff here
        print(track.file)

if __name__ == '__main__':

    app = QApplication([])
    layout = QGridLayout()

    # Build two list - one for track name and one for file name
    track_name = [f'Track {i}' for i in range(8)]
    track_file = [f'path/to/track{i}.mp3' for i in range(8)]
    # Combine the two list into a dict
    tracks = dict(zip(track_name, track_file))

    # Setting some variables to set rows and columns
    col = 0
    row = 0
    # Loop through the dict to create radio buttons and set values
    for name, file in tracks.items():
        track = QRadioButton(name)
        track.file = file
        track.clicked.connect(partial(play, track))
        layout.addWidget(track, row, col, 1, 1)
        if col >= 3:
            col = 0
            row += 1
        else:
            col += 1


    widget = QWidget()
    widget.setLayout(layout)
    widget.show()
    sys.exit(app.exec())
Output:
path/to/track7.mp3 path/to/track5.mp3
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#4
Dear Axel_Erfurt, dear menator01,

Thanks a lot for your effort!!

I switched to an easier to understand example, because I'm a beginner in python (and it is my first GUI in python).
I realized that the use of the Qt Designer was the wrong way for me (because I'm beginner).

Would you please have a look at this easy attempt I made?
In line 68 I've got the error mentioned below:
Many thanks...

from PyQt6.QtWidgets import QLabel, QRadioButton, QVBoxLayout, QApplication, QWidget
import sys, pygame

app = QApplication([])

a = "Adeline Yeo (HP) - Kite Fly High"
b = "Bio Unit - Lights"
c = "cryptic scenery - Stazione Termini"
d = "Human Force - Blackout"
e = "Ketsa - Holding The Line"
f = "Maarten Schellekens - Salt Lake Swerve"
g = "Strobotone - Dance Track"

label = QLabel("Welche Musik soll laufen?")
rb1 = QRadioButton(a)
rb2 = QRadioButton(b)
rb3 = QRadioButton(c)
rb4 = QRadioButton(d)
rb5 = QRadioButton(e)
rb6 = QRadioButton(f)
rb7 = QRadioButton(g)

layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(rb1)
layout.addWidget(rb2)
layout.addWidget(rb3)
layout.addWidget(rb4)
layout.addWidget(rb5)
layout.addWidget(rb6)
layout.addWidget(rb7)

rb1.setChecked(True)
pygame.mixer.init()


def play(rb1, rb2, rb3, rb4, rb5, rb6, rb7):
    if rb1.isChecked():
        pygame.mixer.music.load(a + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb2.isChecked():
        pygame.mixer.music.load(b + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb3.isChecked():
        pygame.mixer.music.load(c + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb4.isChecked():
        pygame.mixer.music.load(d + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb5.isChecked():
        pygame.mixer.music.load(e + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb6.isChecked():
        pygame.mixer.music.load(f + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb7.isChecked():
        pygame.mixer.music.load(g + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)


rb1.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb2.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb3.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb4.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb5.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb6.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
rb7.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))

widget = QWidget()
widget.setLayout(layout)
widget.show()

app.exec()
Traceback (most recent call last):
  File "D:\Daten\menu\main.py", line 68, in <module>
    rb1.toggled.connect(play(rb1, rb2, rb3, rb4, rb5, rb6, rb7))
TypeError: argument 1 has unexpected type 'NoneType'
Reply
#5
Not tested as I do not have those mp3 files. Mp3s will need to be in same folder as script.

#! /usr/bin/env python3
import sys
from PyQt5.QtWidgets import (QApplication, QFrame, QLabel, QGridLayout, QWidget, QRadioButton)
from PyQt5.QtCore import Qt
from functools import partial
import pygame

# Define function for playing mp3 files
def play(track):
    # Check if track is checked
    if track.isChecked():
        # pygame.mixer.music.load(track.file)
        # pygame.mixer.music.set_volume(0.7)
        # pygame.mixer.music.play(-1)
        # Do pygame mixer stuff here
        print(track.file)

if __name__ == '__main__':

    app = QApplication([])
    layout = QGridLayout()

    tracks = [
        "Adeline Yeo (HP) - Kite Fly High",
        "Bio Unit - Lights",
        "cryptic scenery - Stazione Termini",
        "Human Force - Blackout",
        "Ketsa - Holding The Line",
        "Maarten Schellekens - Salt Lake Swerve",
        "Strobotone - Dance Track"
    ]

    label = QLabel("Welche Musik soll laufen?")
    label.setFrameShape(QFrame.Box)
    label.setFrameShadow(QFrame.Sunken)
    label.setAlignment(Qt.AlignCenter)
    label.setStyleSheet('font-size: 26px;')
    layout.addWidget(label, 0, 0, 1, 3)

    # Setting some variables to set rows and columns
    col = 0
    row = 1
    i = 0
    track = []
    # Loop through the list
    for file in tracks:
        track.append(QRadioButton(file.title()))
        track[i].file = f'{file}.mp3'
        track[i].clicked.connect(partial(play, track[i]))
        layout.addWidget(track[i], row, col, 1, 1)
        i += 1
        if col >= 2:
            col = 0
            row += 1
        else:
            col += 1
    track[0].setChecked(True)


    widget = QWidget()
    widget.setLayout(layout)
    widget.show()
    sys.exit(app.exec())
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#6
mentator's code is much better, yours do not work for me

changed to this and it works

from PyQt6.QtWidgets import QLabel, QRadioButton, QVBoxLayout, QApplication, QWidget
import sys, pygame
 
app = QApplication([])
 
a = "Track1"
b = "Track2"
c = "Track3"
d = "Track4"
e = "Track5"
f = "Track6"
g = "Track7"
 
label = QLabel("Welche Musik soll laufen?")
rb1 = QRadioButton(a)
rb2 = QRadioButton(b)
rb3 = QRadioButton(c)
rb4 = QRadioButton(d)
rb5 = QRadioButton(e)
rb6 = QRadioButton(f)
rb7 = QRadioButton(g)
 
layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(rb1)
layout.addWidget(rb2)
layout.addWidget(rb3)
layout.addWidget(rb4)
layout.addWidget(rb5)
layout.addWidget(rb6)
layout.addWidget(rb7)
 
pygame.mixer.init()
 
 
def play():
    if rb1.isChecked():
        pygame.mixer.music.load(a + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb2.isChecked():
        pygame.mixer.music.load(b + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb3.isChecked():
        pygame.mixer.music.load(c + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb4.isChecked():
        pygame.mixer.music.load(d + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb5.isChecked():
        pygame.mixer.music.load(e + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb6.isChecked():
        pygame.mixer.music.load(f + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
    if rb7.isChecked():
        pygame.mixer.music.load(g + ".mp3")
        pygame.mixer.music.set_volume(0.7)
        pygame.mixer.music.play(-1)
 
 
rb1.toggled.connect(play)
rb2.toggled.connect(play)
rb3.toggled.connect(play)
rb4.toggled.connect(play)
rb5.toggled.connect(play)
rb6.toggled.connect(play)
rb7.toggled.connect(play)
 
widget = QWidget()
widget.setLayout(layout)
widget.show()
rb1.setChecked(True)
 
app.exec()
Reply
#7
Something that might be worth looking into. The last example on the page. Checkboxes within pygame.
https://stackoverflow.com/questions/3855...-in-pygame
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply
#8
how to play it without pygame

from PyQt6.QtWidgets import QLabel, QRadioButton, QVBoxLayout, QApplication, QWidget
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput
from PyQt6.QtCore import QUrl
  
app = QApplication([])
  
a = "Track1"
b = "Track2"
c = "Track3"
d = "Track4"
e = "Track5"
f = "Track6"
g = "Track7"

player = QMediaPlayer()
audio_output = QAudioOutput()
player.setAudioOutput(audio_output)
audio_output.setVolume(0.7)
  
label = QLabel("Welche Musik soll laufen?")
rb1 = QRadioButton(a)
rb2 = QRadioButton(b)
rb3 = QRadioButton(c)
rb4 = QRadioButton(d)
rb5 = QRadioButton(e)
rb6 = QRadioButton(f)
rb7 = QRadioButton(g)
  
layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(rb1)
layout.addWidget(rb2)
layout.addWidget(rb3)
layout.addWidget(rb4)
layout.addWidget(rb5)
layout.addWidget(rb6)
layout.addWidget(rb7)
  
  
def play():
    player.stop()
    if rb1.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{a}.mp3'))        
    if rb2.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{b}.mp3'))  
    if rb3.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{c}.mp3'))  
    if rb4.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{d}.mp3'))  
    if rb5.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{e}.mp3'))  
    if rb6.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{f}.mp3'))  
    if rb7.isChecked():
        player.setSource(QUrl.fromLocalFile(f'{g}.mp3'))  
    player.play()
  
  
rb1.toggled.connect(play)
rb2.toggled.connect(play)
rb3.toggled.connect(play)
rb4.toggled.connect(play)
rb5.toggled.connect(play)
rb6.toggled.connect(play)
rb7.toggled.connect(play)
  
widget = QWidget()
widget.setLayout(layout)
widget.show()
rb1.setChecked(True)
  
app.exec()
menator01 likes this post
Reply
#9
The game should play music from a playlist. I would have a file with the track file names. Either play tracks to completion or associate a track with a level in the game.

Independently you could write a small app to create the playlist. The playlist editor can be as simple as a list and a couple of buttons. The list displays the playlist files. The buttons delete a track from the list or insert a new track. The insert button draws a file selector dialog for selecting the new track file. For something like this I would use tkinter instead of qt. No need to install packages. No need to worry about what version of qt. A file browser type interface will let you user select any music they want from files already on their computer.
menator01 likes this post
Reply
#10
Dear deanhystad,

I decided to use tkinter instead of PyQt, because my friends are (like me) no pc specialists.
Later I want to use cx freeze to generate a exe - this exe I want to gift to someone.

Now I'm working on a GUI in tkinter to let the user create the playlist.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  QT Designer Krissstian 4 1,720 May-26-2022, 09:45 AM
Last Post: Krissstian
  Qt Designer : help document viewer error. davediamond 2 1,609 Apr-14-2022, 10:38 AM
Last Post: davediamond
  [PyQt] QT5 Designer Drawing greenhorn1 1 2,572 Dec-30-2021, 05:12 PM
Last Post: deanhystad
  Installed Designer - Helpf Files for "assistant" are missing Valmont 0 2,011 Mar-22-2021, 11:09 AM
Last Post: Valmont
  Using a GUI Designer vs. hard coding 357mag 9 6,106 Feb-21-2021, 06:43 PM
Last Post: kkaur
  Attempting to use Qt Designer. thewolf 17 6,161 Feb-17-2021, 12:03 AM
Last Post: thewolf
  [PyGUI] help code python QT Designer yan_mhb 0 1,932 Aug-12-2020, 09:32 AM
Last Post: yan_mhb
  [Kivy] Kivy Designer Module Error SARAVANAN_M 0 3,876 Nov-20-2019, 09:57 AM
Last Post: SARAVANAN_M
  [PyQt] Send data between windows Pyqt5 and Qt Designer kkonrad002 8 10,215 Sep-05-2019, 02:25 PM
Last Post: Denni
  [PyQt] Qt Designer - Making a Font with a border jimmyvegas29 4 7,567 Feb-19-2019, 11:08 PM
Last Post: jimmyvegas29

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020