Python Forum
help needed running a simple function in pyqt5
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
help needed running a simple function in pyqt5
#25
I did a version of your number gen. Still will be tweaking on it a little. eg(on the roulette have red text for red picks)

#! /usr/bin/env python3
# Do the imports
import random as rnd
import sys
from PyQt6.QtWidgets import (QMainWindow, QApplication, QWidget, QGridLayout, QPushButton, QLabel,
QListWidget, QListWidgetItem, QFrame, QHBoxLayout, QSpinBox)
from PyQt6.QtCore import Qt
from PyQt6.QtGui import (QFont, QColor)

# Create the Gamble class
class Gamble:

    # Define the lottery, choose which lottery we are playing
    # Powerball ends with 69 while mega millions ends with 70
    def lottery(self, game, listbox):
        self.numbers = []
        if game == 'powerball':
            end_number = 69
            bonus_end_number = 26
        elif game == 'mega millions':
            end_number = 70
            bonus_end_number = 25
        while len(self.numbers) < 6:
            number = rnd.randint(0, end_number)
            if str(number) not in self.numbers:
                self.numbers.append(f'{number:02d}')
        # Get the bonus number
        self.bonus = rnd.randint(0, bonus_end_number)

        item = QListWidgetItem(f'{game.title()} Numbers')
        font = QFont()
        font.setBold(True)
        item.setFont(font)
        item.setForeground(QColor('blue'))
        item2 = QListWidgetItem(f'{", ".join(self.numbers)} - Bonus Number: {self.bonus}')
        listbox.insertItem(0, item)
        listbox.insertItem(1, item2)
        listbox.insertItem(2, QListWidgetItem(''))


    # Define the pick # lotto
    # rng depends on which playing 3 for pick3, 4 for pick4, and so on
    def pick(self, rng, listbox, game):
        self.numbers = []
        for i in range(rng):
            number = rnd.randint(0,9)
            self.numbers.append(f'{number}')

        item = QListWidgetItem(f'{game.title()} Numbers')
        font = QFont()
        font.setBold(True)
        item.setFont(font)
        item.setForeground(QColor('blue'))
        item2 = QListWidgetItem(f'{", ".join(self.numbers)}')
        listbox.insertItem(0, item)
        listbox.insertItem(1, item2)
        listbox.insertItem(2, QListWidgetItem(''))


    # Define keno
    def keno(self, spots, listbox, game):
        self.numbers = []
        while len(self.numbers) < int(spots.value()):
            number = rnd.randint(1, 80)
            if str(number) not in self.numbers:
                self.numbers.append(f'{number}')
        item = QListWidgetItem(f'{game.title()} Numbers')
        font = QFont()
        font.setBold(True)
        item.setFont(font)
        item.setForeground(QColor('blue'))
        item2 = QListWidgetItem(f'{", ".join(self.numbers)}')
        listbox.insertItem(0, item)
        listbox.insertItem(1, item2)
        listbox.insertItem(2, QListWidgetItem(''))

    # Define rouleere
    def roulette(self, listbox, game):
        black = ('black', ['28','26', '11', '20', '17', '22', '15', '24', '13', '10', '29', '8', '31', '6', '33', '4', '35', '2'])
        red = ('red', ['9', '30', '7', '32', '5', '34', '3', '36', '1', '27', '25', '12', '19', '18', '21', '16', '23', '14'])
        green = ('green',['0', '00'])

        numbs = rnd.choice([black,red,green])

        choices = {
        'odd even':['odd', 'even'],
        'column':['1st', '2nd', '3rd'],
        'dozen':['1-12', '13-24', '25-36'],
        'color':['black', 'red'],
        'low high':['Low 1-18', 'High 19-36']
        }

        picks = []
        picks.append(f'{numbs[0]} {rnd.choice(numbs[1])}')
        for key, val in choices.items():
            picks.append(f'{key}: {rnd.choice(val)}')
        # return picks

        item = QListWidgetItem(f'{game.title()} Numbers')
        font = QFont()
        font.setBold(True)
        item.setFont(font)
        item.setForeground(QColor('blue'))
        item2 = QListWidgetItem(f'{", ".join(picks)}')
        listbox.insertItem(0, item)
        listbox.insertItem(1, item2)
        listbox.insertItem(2, QListWidgetItem(''))

class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('Number Generator')
        self.setMinimumWidth(500)

        gamble = Gamble()

        button = {
            'powerball': lambda: gamble.lottery('powerball', self.listbox),
            'mega millions': lambda: gamble.lottery('mega millions', self.listbox),
            'pick5': lambda: gamble.pick(5, self.listbox, 'pick5'),
            'pick4': lambda: gamble.pick(4, self.listbox, 'pick4'),
            'pick3': lambda: gamble.pick(3, self.listbox, 'pick3'),
            'keno': lambda: gamble.keno(spinner, self.listbox, 'keno'),
            'roulette': lambda: gamble.roulette(self.listbox, 'roulette'),
            'clear': lambda: self.listbox.clear()
        }

        # Create a container for widgets
        container = QGridLayout()

        hbox = QHBoxLayout()
        spinner = QSpinBox()
        spinner.setRange(1, 12)


        #Create the header
        header = QLabel('Number Generator')
        header.setAlignment(Qt.AlignmentFlag.AlignCenter)
        header.setFrameStyle(1)
        header.setFrameShadow(QFrame.Shadow.Sunken)
        header.setStyleSheet('font-size: 18px; font-weight:bold;')
        container.addWidget(header, 0, 0,1, 4,)

        # Create the buttons
        col = 0
        row = 1
        for btn, cmd in button.items():
            button = QPushButton(btn.title())
            button.pressed.connect(cmd)
            if btn == 'keno':
                hbox.addWidget(button)
                hbox.addWidget(QLabel('Spots:'))
                hbox.addWidget(spinner)
                container.addLayout(hbox, row, col, 1, 1)
            else:
                container.addWidget(button, row, col, 1, 1)
            if col >= 3:
                row += 1
                col = 0
            else:
                col += 1

        self.listbox = QListWidget()

        container.addWidget(self.listbox, 3, 0, 1, 4)


        widget = QWidget()
        widget.setLayout(container)
        self.setCentralWidget(widget)

def main():
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec())

if __name__ == '__main__':
    main()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags


Reply


Messages In This Thread
RE: help needed running a simple function in pyqt5 - by menator01 - Feb-18-2022, 08:52 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  How To Make A PyQt5 Progress Bar Run While Executing A Function rcwildabeast 1 258 Apr-26-2024, 02:18 AM
Last Post: menator01
  simple tkinter question function call not opening image gr3yali3n 5 3,534 Aug-02-2022, 09:13 PM
Last Post: woooee
  Tkinter won't run my simple function AthertonH 6 3,986 May-03-2022, 02:33 PM
Last Post: deanhystad
  [Tkinter] Have tkinter button toggle on and off a continuously running function AnotherSam 5 5,081 Oct-01-2021, 05:00 PM
Last Post: Yoriz
  A Simple PyQt5 Class zoro 15 5,842 Mar-02-2020, 07:25 PM
Last Post: micseydel
  Refresh image in label after every 1s using simple function jenkins43 1 5,522 Jul-28-2019, 02:49 PM
Last Post: Larz60+
  Huge code problems (buttons(PyQt5),PyQt5 Threads, Windows etc) ZenWoR 0 2,861 Apr-06-2019, 11:15 PM
Last Post: ZenWoR

Forum Jump:

User Panel Messages

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