Käyttöliittymän automatisointia - TiViOpetus/Autolainaus GitHub Wiki

Elementtien siirtäminen ja fokuksen palauttaminen

Seuraavassa esimerkkikoodissa siirretään elementtejä ja tallennetaa tieto viimeeksi käytetystä lineEdit-elementistä. Kun se on tiedossa fokus voidaan palauttaa takaisin elementtiin, esim. painikkeen painamisen jälkeen:

# ESIMERKKI ELEMENTTIEN SIIRTÄMISESTÄ JA FOKUKSEN PALAUTTAMISESTA
# ===============================================================

# KIRJASTOJEN JA MODUULIEN LATAUKSET
# ----------------------------------
import os # Polkumääritykset
import sys # Käynnistysargumentit

from PySide6 import QtWidgets # Qt-vimpaimet

# mainWindow_ui:n tilalle käännetyn pääikkunan tiedoston nimi
# ilman .py-tiedostopäätettä
from suttu_ui import Ui_MainWindow # Käännetyn käyttöliittymän luokka

# Määritellään luokka, joka perii QMainWindow- ja Ui_MainWindow-luokan
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    """A class for creating main window for the application"""
    
    # Määritellään olionmuodostin ja kutsutaan yliluokkien muodostimia
    def __init__(self):
        super().__init__()

        # Luodaan käyttöliittymä konvertoidun tiedoston perusteella MainWindow:n ui-ominaisuudeksi. Tämä suojaa lopun MainWindow-olion ylikirjoitukselta, kun ui-tiedostoa päivitetään
        self.ui = Ui_MainWindow()

        # Kutsutaan käyttöliittymän muodostusmetodia setupUi
        self.ui.setupUi(self)

        # Muuttuja (ominaisuus) viimeeksi muokatun elementin nimen tallentamiseen
        self.lastEditedElementName = 'Ei mikään'

        # OHJELMOIDUT SIGNAALIT
        # ---------------------
        
        # Kun OK-painiketta on klikattu, kutsutaan buttonPressSlot-metodia
        self.ui.pushButton.clicked.connect(self.buttonPressSlot)

        # Kun Palauta-painiketta on klikattu siirrä ikkuna takaisin
        self.ui.resetPositionsPushButton.clicked.connect(self.resetPositions)

        # Kun kenttä menettää fokuksen kirjataan kentän nimi ominaisuuteen lastEditedElementName
        self.ui.firstNameLineEdit.editingFinished.connect(self.setLastEditedElement)

        # Last Focus -painike
        self.ui.lastFocusPushButton.clicked.connect(self.showLastElementName)
        
   
    # OHJELMOIDUT SLOTIT
    # ------------------

    # Tallennetaan elementin nimi
    def setLastEditedElement(self):
        self.lastEditedElementName = 'firstNameLineEdit'
        
    # Näytetään elementin nimi tilarivillä ja siirretään fokus takaisin
    def showLastElementName(self):
        message = f'viimeeksi käytetty kenttä on {self.lastEditedElementName}'
        self.ui.statusbar.showMessage(message)

        # Haetaan elementti nimen perusteella ja siirretään fokus siihen
        element = self.findChild(QtWidgets.QLineEdit, self.lastEditedElementName)
        element.setFocus()

    # Siirretään elementtejä kehyksen avulla ja kehyksen sisällä
    def buttonPressSlot(self):
        self.ui.statusbar.showMessage("Painoit sitten nappia...", 5000)
        self.ui.frame.move(300, 250)
        self.ui.label.move(100,100)

        # Luetaan pääikkunna sisällön korkeus ja leveys
        height = self.ui.centralwidget.height()
        width = self.ui.centralwidget.width()
        message = f'ikkunan korkeus on {height} ja leveys {width}'
        self.ui.statusbar.showMessage(message, 5000)

    # Siirretään elementit alkuperäisille paikoille
    def resetPositions(self):
        self.ui.frame.move(0,0)
        self.ui.label.move(0,10)

    # Avataan MessageBox
    def openWarning(self):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setIcon(QtWidgets.QMessageBox.Critical)
        msgBox.setWindowTitle('Hirveetä!')
        msgBox.setText('Jotain kamalaa tapahtui')
        msgBox.setStandardButtons(QtWidgets.QMessageBox.Ok)
        msgBox.exec()


# Luodaan sovellus
app = QtWidgets.QApplication(sys.argv)

# Luodaan objekti pääikkunalle ja tehdään siitä näkyvä
window = MainWindow()
window.show()

# Käynnistetään sovellus ja tapahtumienkäsittelijä
app.exec()