PySide6 - 基本的窗口操作(1)

利用PySide6 来创建GUI。

菜鸡笔记,幻觉学习

由于工作上需要写一些简单工具,所以试试pyside


这段笔记可以实现一个:
- 带有图标
- 带有退出按钮,并且会弹出确认窗口
的菜鸡界面
-----更新-------
1. 修改了import

简单窗口

● QWidget 是基础类,一个widget可以作为顶层widget,子widget

● QWidget有两个参数 parent,flags。parent可以是一个QWidget, `flags 参数可以是一个 PySide.Core和 Qt.WindowFlags组合。


下面的示例是用来实现一个空白窗口,并在运行3秒钟后自动改变窗口大小。

import sys, time
from PySide6 import QtWidgets
from PySide6.QtWidgets import *     # 这里有点重复了
from PySide6.QtWidgets import QWidget
from PySide6 import QtCore
# Create our main window
class SampleWindow(QWidget):   # 创建一个窗口类,并让他继承Qwidget
    # 构造函数
    def __init__(self):
        super(SampleWindow, self).__init__()
        self.initGUI()
    def initGUI(self):
        self.setWindowTitle('Sample Window')
        #self.setGeometry(300,300,200,150)
        self.show()
        print('Sample window is showing ')
if __name__ == '__main__':
    #Expception Handler
    try:
        myApp = QtWidgets.QApplication(sys.argv)
        myWindow = SampleWindow()
        QtCore.QCoreApplication.processEvents()
        time.sleep(3)
        myWindow.resize(300,300)
        myWindow.setWindowTitle('My Window is resized')
        myWindow.repaint()
        sys.exit(myApp.exec())
    except NameError:
        print('Name Error:' , sys.exc_info()[1])
    except SystemExit:
        print('Closeing Window...')
    except Exception:
        print(sys.exc_info()[1])
  • SampleWindow 是继承自QWidget,所以所有Qwidget的属性都可以使用
  • __init__ 会在对象建立的时候运行。
  • super 函数可以获取继承的被overide的方法(详细参考)
  • initGUI 会给出一个初始化的窗口并设置好默认大小
  • PySide Application必须创建一个main application object
  • 主程序部分:
    • 实例化一个QApplication类,这个看起来是每个PySide程序必须有的
    • 接着我们用我们定义的SampleWindow类来实例化了一个对象,叫做myWindow
      • 这一步中,`__init__`函数会被调起,并且根据我们定义的initGUI方法定义窗口大小
    • 接下来我们让程序暂停3s,然后resize整个window的大小,并且repaint()窗口
    • 注意上面的的processEvents(),这个是一个event loop 如果我们取消掉这个,我们只能看到 “Sample window resize”但是在PySide6中,如果取消后对结果影响不大。原因不太清楚目前

创建应用图标

在上面的code中继续添加,在SampleWindow Class类中添加新的方法来实现 窗口中图标

# add import statement 
from PySide6.QtGui import QIcon
# add function to initGUI
        appIcon = QIcon('/your icon.png') # 这个图标自己换成自己的
        self.setWindowIcon(appIcon)
        self.show()

设置一些icon的模式

PySide中Icon的模式是需要通过pixmap()这个方法来设置。

    def setIconModes(self):
        myIcon1 = QIcon('/your icon.png')
        myLabel1 = QLabel('sample',self)
        pixmap1 = myIcon1.pixmap(50,50,QIcon.Active,QIcon.On)
        myLabel1.setPixmap(pixmap1)
        myLabel1.show()
        myIcon2 = QIcon('/your icon.png')
        myLabel2 = QLabel('sample', self)
        pixmap2 = myIcon2.pixmap(50, 50, QIcon.Disabled, QIcon.Off)
        myLabel2.setPixmap(pixmap2)
        myLabel2.move(50,0)
        myLabel2.show()
        myIcon3 = QIcon('/your icon.png')
        myLabel3 = QLabel('sample', self)
        pixmap3 = myIcon3.pixmap(50, 50, QIcon.Selected, QIcon.On)
        myLabel3.setPixmap(pixmap3)
        myLabel3.move(100, 0)
        myLabel3.show()

创建ToolTip

  • 需要导入QIcon模块
  • 在使用setToolTip之前需要先用 QToolTip 设定 tooltips 的一些设定
# add tool tips
# set tooltips first and then use in following code
QToolTip.setFont(QFont('Decorative',8,QFont.Bold))
self.setToolTip('Main Window')

设定好基础的参数后,可以开始建立Tooltips

def setIconModes(self):
    myIcon1 = QIcon('/your icon.png') # 这个图标自己换成自己的
    myLabel1 = QLabel('sample',self)
    pixmap1 = myIcon1.pixmap(50,50,QIcon.Active,QIcon.On)
    myLabel1.setPixmap(pixmap1)
    myLabel1.setToolTip('Active Icon')
    myLabel1.show()
    myIcon2 = QIcon('/your icon.png')
    myLabel2 = QLabel('sample', self)
    pixmap2 = myIcon2.pixmap(50, 50, QIcon.Disabled, QIcon.Off)
    myLabel2.setPixmap(pixmap2)
    myLabel2.move(50,0)
    myLabel2.setToolTip('Disable Icon')
    myLabel2.show()
    myIcon3 = QIcon('/your icon.png')
    myLabel3 = QLabel('sample', self)
    pixmap3 = myIcon3.pixmap(50, 50, QIcon.Selected, QIcon.On)
    myLabel3.setPixmap(pixmap3)
    myLabel3.move(100, 0)
    myLabel3.setToolTip('Selected Icon')
    myLabel3.show()


添加按钮

用PushButton举例,Pushbutton可以通过QPushButton 建立

QPushButton(parent = None)
QPushButton(text,[parent = None])
QPushButton(icon, text, [parent = None])

在这个示例中,简单的利用QPushButton来做一个退出按钮,同时也实现退出的二次确认。

  1. 添加button
    def setButton(self):
        add quit button
        myButton = QPushButton('Quit',self)
        myButton.move(50,100)
        myButton.clicked.connect(self.quitApp) # link to Quit App, this function will be create later


同时这个setButton也需要放在initGUI(),这样在程序运行的时候会直接显示quitbutton
2. 创建二次确认窗口

def msgApp(self,title,msg):
    # Create a dialog with title and msg
    userInfo = QMessageBox.question(self,title,msg,QMessageBox.Yes , QMessageBox.No)
    if userInfo == QMessageBox.Yes:
        return 'Y'
    if userInfo == QMessageBox.No:
        return "N"


  • 创建QMessageBox,并且给出YES NO选项
  • YES / No 给出不一样的return
  • QMessageBox可以直接用 .Yes or .No来建立YES NO选项

3. quitApp function

    def quitApp(self):