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来做一个退出按钮,同时也实现退出的二次确认。
- 添加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):