Python Forum
[PyQt] QPushButton and and QmenuBar issues
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] QPushButton and and QmenuBar issues
#1
import json
import math
import os
import PyQt5
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets
import sys
from importlib import import_module

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Grandier Calcutron")
        self.setWindowIcon(QIcon('icon.ico'))
        self.setGeometry(0, 0, 2000, 992)
        self.Welcome_Message()

    def Welcome_Message(self):
        global __Format__
        Y = 10
        X = 100
        Scale_X = 120
        Scale_Y = 30
        welcome_message = QLabel("Welcome to the Grandier Calcutron!", self)
        welcome_message.setFont(QFont("Arial",16))
        welcome_message.move(700, 300)
        tutorial_message_1 = QLabel("Import a deck to begin!\nFormatting examples are in the sample files.", self)
        tutorial_message_1.setFont(QFont("Arial",16))
        tutorial_message_1.setAlignment(Qt.AlignCenter)
        tutorial_message_1.move(660, 340)
        Import_Deck = QPushButton(self)
        Import_Sym = QPixmap("symbols/import_sym")
        Import_Sym = QIcon(Import_Sym)
        Import_Deck.setIcon(Import_Sym)
        Import_Deck.clicked.connect(self.import_click)
        Import_Deck.clicked.connect(welcome_message.hide)
        Import_Deck.clicked.connect(tutorial_message_1.hide)
        Import_Deck.clicked.connect(Import_Deck.hide)
        Import_Deck.move(10, 10)
        Import_Deck.resize(100, 100)
        stats_button = QPushButton("Stats", self)
        stats_button.move(250, Y)
        stats_button.resize(120, 30)
        formats = ["Commander", "Oath Breaker", "Standard", "Free-Form", "Artisan", "Prismatic"]
        self.combo = QComboBox(self)
        for i in formats:
            self.combo.addItem(i)
        self.combo.move(370,Y+1)
        self.combo.resize(120, 28)
        __Format__ = self.combo.currentText()

    def display_color_event(self):
        X = 30
        Y = 10
        color_icon = QPixmap("symbols/C.png")
        color_icon_label = QLabel(self)
        new_color_icon = color_icon.scaled(100, 100, Qt.KeepAspectRatio, Qt.FastTransformation)
        color_icon_label.setPixmap(new_color_icon)
        color_icon_label.move(X, Y)
        color_icon_label.show()

    def import_click(self):
        self.openFileNameDialog()
        ext = os.path.splitext(deckFile)[-1].lower()
        if ext == ".cmdr":
            fmtda.commander.decklist_import(deckFile)
            self.decklist_display(formatword="commander")
        elif ext == ".oath":
            fmtda.oathbreaker.decklist_import(deckFile)     
            self.decklist_display(formatword="oath-breaker")       
        elif ext == ".stand":
            fmtda.standard.decklist_import(deckFile)   
            self.decklist_display()     
        elif ext == ".free":
            fmtda.free_form.decklist_import(deckFile)        
            self.decklist_display()
        elif ext == ".arti":
            fmtda.artisan.decklist_import(deckFile)      
            self.decklist_display()  
        elif ext == ".pris":
            fmtda.prismatic.decklist_import(deckFile)
            self.decklist_display()
        self.display_color_event()

    def decklist_display(self, formatword="nil"):
        lis = fmtda.base_decklist
        commanderlis = fmtda.commanders
        Y_BASE = 120
        X_BASE = 20
        X = 20
        X2 = 18
        Y = 120
        Y2 = 100
        for num, card in lis:
            if card in commanderlis:
                label = QLabel(f"{card} is your {formatword}", self)
                print(f"{card} is your {formatword}")
            else:
                label = QLabel(f"{num}x {card}", self)
            pixmap = QPixmap("UI/namebox.png")
            image = QLabel(self)
            pixmap = pixmap.scaled(200, 30, Qt.KeepAspectRatio, Qt.FastTransformation)
            image.setPixmap(pixmap)
            image.move(X2, Y2)
            image.show
            label.setFont(QFont("Arial",12))
            label.move(X, Y)
            label.show()
            Y = Y+26
            Y2 = Y2+30
            if Y > (Y_BASE)+26*31:
                Y = Y_BASE
                X = X+333
        Y = Y_BASE
        X = X_BASE
        for card in commanderlis:
            label = QLabel(f"{card} is your {formatword}", self)
            print(f"{card} is your {formatword}")
            label.setFont(QFont("Arial",12))
            label.move(X+120, Y-30)
            label.show()
            Y = Y+26
            Y2 = Y2+30
            if Y > (Y_BASE)+26*31:
                Y = Y_BASE
                X = X+333
    
    def openFileNameDialog(self):
        global deckFile
        deckfile = 0
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self,"QFileDialog.getOpenFileName()", "","Commander files (*.cmdr);;Oath Breaker files (*.oath);;Standard files (*.stand);;Free Form files (*.free);;Artisan files (*.arti);;Prismatic files (*.pris)", options=options)
        deckFile = fileName


app = QApplication(sys.argv)

screen = Window()
screen.show()
sys.exit(app.exec_())
This is my code, the issue with it is the button icon is far too small. I want it to be larger, (100px by 100px) and it needs to be all that's visible of the button.
I also want a menu bar and I cannot figure out how to implement that. I've tried just about everything on the first two pages of google. I also cannot use QtDesigner. Any help would be much appreciated!
Reply
#2
you can add

Import_Deck.setIconSize(QSize(100, 100))
Reply
#3
(Oct-27-2020, 10:03 PM)Axel_Erfurt Wrote: you can add

Import_Deck.setIconSize(QSize(100, 100))

Ah! that gets it to the right size! Thank you so much!
Is there a way to round the corners of the button so I can have it smoothly fit into a circle hole in my UI?
Reply
#4
You can use StyleSheet (css)

for example

Import_Deck.setStyleSheet("background: #204a87; border-radius: 10px;")
Reply
#5
(Oct-27-2020, 10:30 PM)Axel_Erfurt Wrote: You can use StyleSheet (css)

for example

Import_Deck.setStyleSheet("background: #204a87; border-radius: 10px;")

Thank you so much for your help! Big Grin I was stuck on that button most of the day.
Reply
#6
For menubar and more there are tutorials at zetcode and learnpyqt
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyQt] `QPushButton` without mouse click animation Atalanttore 2 5,863 Apr-22-2019, 01:00 PM
Last Post: Atalanttore
  (pyQt/pySide)setStyleSheet(border…) makes QPushButton not clickable in Maya vladlenPy 0 4,730 Apr-15-2018, 12:41 PM
Last Post: vladlenPy

Forum Jump:

User Panel Messages

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