For the next few tutorials, we're going to cover some of the larger widgets that come with PyQT. In this tutorial, we're going to cover the font picker widget.
The idea of the font widget is to be able to "choose a font" for whatever reasons why someone may want to choose a font. First, let's create a toolbar button to do that, this time with just text as the label rather than an image:
fontChoice = QtGui.QAction('Font', self) fontChoice.triggered.connect(self.font_choice) #self.toolBar = self.addToolBar("Font") self.toolBar.addAction(fontChoice)
Now all we need is a font_choice method. Before we get there, note that commented out line. You have a choice with toolbars to either have the items on it on the same toolbar, or on a different tool bar. Placing initially is identical, but, if you move them around, either they will move together, or not. Try both, and try moving the toolbar to see what I mean.
def font_choice(self): font, valid = QtGui.QFontDialog.getFont() if valid: self.styleChoice.setFont(font)
With these additions, we're all set. The full code:
import sys from PyQt4 import QtGui, QtCore class Window(QtGui.QMainWindow): def __init__(self): super(Window, self).__init__() self.setGeometry(50, 50, 500, 300) self.setWindowTitle("PyQT tuts!") self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) extractAction = QtGui.QAction("&GET TO THE CHOPPAH!!!", self) extractAction.setShortcut("Ctrl+Q") extractAction.setStatusTip('Leave The App') extractAction.triggered.connect(self.close_application) self.statusBar() mainMenu = self.menuBar() fileMenu = mainMenu.addMenu('&File') fileMenu.addAction(extractAction) self.home() def home(self): btn = QtGui.QPushButton("Quit", self) btn.clicked.connect(self.close_application) btn.resize(btn.minimumSizeHint()) btn.move(0,100) extractAction = QtGui.QAction(QtGui.QIcon('todachoppa.png'), 'Flee the Scene', self) extractAction.triggered.connect(self.close_application) self.toolBar = self.addToolBar("Extraction") self.toolBar.addAction(extractAction) fontChoice = QtGui.QAction('Font', self) fontChoice.triggered.connect(self.font_choice) #self.toolBar = self.addToolBar("Font") self.toolBar.addAction(fontChoice) checkBox = QtGui.QCheckBox('Shrink Window', self) checkBox.move(100, 25) checkBox.stateChanged.connect(self.enlarge_window) self.progress = QtGui.QProgressBar(self) self.progress.setGeometry(200, 80, 250, 20) self.btn = QtGui.QPushButton("Download",self) self.btn.move(200,120) self.btn.clicked.connect(self.download) print(self.style().objectName()) self.styleChoice = QtGui.QLabel("Windows Vista", self) comboBox = QtGui.QComboBox(self) comboBox.addItem("motif") comboBox.addItem("Windows") comboBox.addItem("cde") comboBox.addItem("Plastique") comboBox.addItem("Cleanlooks") comboBox.addItem("windowsvista") comboBox.move(50, 250) self.styleChoice.move(50,150) comboBox.activated[str].connect(self.style_choice) self.show() def font_choice(self): font, valid = QtGui.QFontDialog.getFont() if valid: self.styleChoice.setFont(font) def style_choice(self, text): self.styleChoice.setText(text) QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(text)) def download(self): self.completed = 0 while self.completed < 100: self.completed += 0.0001 self.progress.setValue(self.completed) def enlarge_window(self, state): if state == QtCore.Qt.Checked: self.setGeometry(50,50, 1000, 600) else: self.setGeometry(50, 50, 500, 300) def close_application(self): choice = QtGui.QMessageBox.question(self, 'Extract!', "Get into the chopper?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) if choice == QtGui.QMessageBox.Yes: print("Extracting Naaaaaaoooww!!!!") sys.exit() else: pass def run(): app = QtGui.QApplication(sys.argv) GUI = Window() sys.exit(app.exec_()) run()
The resulting GUI, if you click on "font" from the toolbar:
Changing the font here will affect the label that says what the current style is. Try changing the font, the size, and the style.
Next, we're going to cover the color picker widget.