PyQt5学习笔记

在使用MainWindow中的一些技巧

【注意:1)尺寸值不包括标题栏的高度和边框的宽度。2)尺寸和设定的样式有关。不同电脑中可用不同的字体及大小,所以,最好不要使用固定尺寸。 3)由于某些函数的调用会使窗口的尺寸发生变化。】 
 1。设置窗口最小化和最大化大小:* 

 self.setMinimumSize(0,0)
 self.setMaximumSize(width,height)
 setMinimumSize(int w,int h)
setMinimumSize(QSize s)    用鼠标可以让窗口变宽、变高。
setMinimumWidth(int w)
setMinimumHeight(int h)
setMaximumSize(int w,int h)
setMaximumSize(QSize s)  用鼠标可以让窗口变宽、变高。
setMaximumWidth(int w)
setMaximumHeight(int h)
=================================================
"""
showMinimized( )- 最小化;
showMaximized() - 最大化;
showFullscreen() - 窗口全屏显示,不带标题栏和边框。
showNormal() - 回到窗口的原始尺寸。
activateWindow() - 将窗口变为活动窗口。如果窗口是最小化状态,将会恢复到窗口的原始尺寸。
#====设置窗口状态self.setWindowState(Qt.WindowMaximized)======
setwindowState () - 根据Flags值,设置窗口的状态。Flags值可为下列值的组合,这些值来自QtCore.Qt。
windowNoState - 正常状态
windowMinimized - 最小化
windowMaximized - 最大化
windowFullScreen - 全屏显示
windowActive - 活动窗口
可用下列函数来获得窗口的状态:
isMinimized () - 如果窗口最小化,返回值为True;否则,为False;
isMaximized() - 如果窗口最大化,返回值为True;否则,为False;
isFullScreen( ) - 如果窗口全屏显示,返回值为True;否则,为False;
isActiveWindow() - 如果是活动窗口,返回值为True;否则,为False;;
windowstate() - 返回窗口状态的组合值.
"""

2。 设置窗口全屏显示: 
 self.showMaximized() 
3。获得屏幕大小、窗口大小: 
要让窗口显示在屏幕中央,就需要知道屏幕的尺寸。

#获得屏幕尺寸
 screen = QtGui.QDesktopWidget().screenGeometry() 
 size = [screen.width(), screen.height()]
self.resize(screen.width(), screen.height())
"""
静态函数QApplication.desktop()来获取代表桌面的QDesktopWidget 对象。再通过调用QDesktopWidget类的函数得到相应值:
width():屏幕宽度的像素值;
height()::屏幕高度的像素值;
screenGeomtry():返回整个屏幕的位置和尺寸的QRect对象;
availableGeomtry():返回屏幕可用区域的位置和尺寸的QRect对象,即扣除任务栏的区域。
"""
desktop = QtWidgets.QApplication.desktop()
x = (desktop.width() - window.width()) 
y = (desktop.height() - window.height())
#或
desktop = QtWidgets.QApplication.desktop()
x = (desktop.width() - window.frameSize().width()) 
y = (desktop.height() - window.frameSize().height())
#2、获得窗口尺寸
rect = window.geometry()
print(rect.left(), rect.top())            
print(rect.width(), rect.height())       
rect = window.frameGeometry()
print(rect.left(), rect.top())            
print(rect.width(), rect.height()) 
"""
geometry():返回包含x,y轴位置以及窗口宽、高的QRect实例;这些值不包括标题栏的高度和边框的宽度。
frameGeometry():返回的参数与geometry()相同,但包括标题栏的高度和边框的宽度且要在显示之后调用才有效。 
"""   

4。设置窗口显示的左上角坐标、大小,位置等【x,y】:

 #设置窗口在屏幕的位置
move(int x,int y)
move(QPoint p)
#窗口的位置是相对于父窗口的位置
setGeometry(int X,int Y,int W,int H) 原点位置左上角。x 轴向右,y轴向下。
setGeometry(QRect r)
setGeometry()可同时设置窗口的位置和尺寸,与move()不同,x,y的值不包括题栏的高度和边框的宽度。所以,如果执行setGeometry(0,0,1000,800),窗口的标题栏和边框在屏幕之外,而无法显示在屏幕上。
#窗口重新设置大小
window.resize(300, 100)
window.move(10, 10)

5。设置窗口样式:self.setWindowFlag(Qt.Window) 
 使用QWidget类创建的默认窗口有一个标题栏和系统图标,标题栏、最大化按钮、最小化按钮和关闭按钮。调用setWindowsFlags()函数或者在用构造函数创建窗口时设置flags,可改变窗口的类型。setWindowsFlags()的调用要在窗口显示之前。 
 【引用http://blog.sina.com.cn/s/blog_6483fa330102xkt0.html】 

其格式为:setWindowsFlags(Qt.WindowFlags type)
  其中Qt.WindowFlags在QtCore.Qt类中定义,包括:
       Widget(小工具):QWidget类的默认类型
       Window(窗口):QWidget类创建的是窗口,父组件可有可无。有标题栏、最小化、最大化和关闭按钮
       Dialog(对话框):有标题栏、帮助和关闭按钮。窗口大小可用鼠标调整。将窗口设置为对话框类型的代码为:window.setWindowsFlags(QtCore.Qt.Dialog)
       Sheet和Drawer(表和抽屉):窗口的Mac系统样式
       Popup(弹出菜单):窗口表现为弹出菜单样式,没有边框和标题,但有阴影,无法用鼠标调整大小。
       Tool(工具栏):窗口表现为工具栏,有边框和比标准窗口标题栏高度小的标题栏和关闭窗口,用鼠标可以调整大小。
       ToolTip(提示):窗口表现为帮助提示,没有边框和标题,无法用鼠标调整大小。
       SplashScreen(启动窗口):窗口表现为启动窗口,没有边框和标题,无法用鼠标调整大小。是QSplashScreen类的默认值。
       Desktop(桌面):窗口表现为桌面,不会在屏幕上显示。
       SubWindow(子窗口):窗口表现为子窗口,有边框,标题栏,不能单独存在,也无法用鼠标调整大小。
       ForeignWindow(外部窗口):表示窗口为另一进程创建。
       CoverWindow(封面窗口):在移动到平台上最小化应用的窗口。

  通过windowType()函数可获取当前窗口的类型。在创建窗口时可用“|”运行符一次设置多个属性。下面列出QtCore.Qt常用的一些属性,全面的内容详见文档:
       MSWindowsFixedSizeDialogHint - 禁止调整窗口尺寸;
       FramelessWindowHint - 去除边框和标题栏;不能调整、移动窗口;
       NoDropShadowWindowHint - 去除窗口的阴影;
       CustomizeWindowHint - 去除边框和标题栏, 但增加bulk效果,尺寸可调整;
       WindowTitleHint - 增加窗口标题;
       WindowSystemMenuHint - 增加系统菜单和关闭按钮;
       WindowMinimizeButtonHint - 增加最小化按钮;
       WindowMaximizeButtonHint - 增加最大化按钮;
       WindowMinMaxButtonsHint-增加最小化、最大化按钮;;
       WindowCloseButtonHint-增加关闭按钮;
       WindowContextHelpButconHint-增加帮助按钮;;
       WindowStaysOnTopHint - 将窗口置顶:
       WindowStaysOnBottomHint - 将窗口置底。
      通过windowFlags()函数可获取当前窗口的属性

6 .  设置窗口大小为固定值:【窗口标题栏上的最大化按钮无效;用鼠标无法调整窗口尺寸】 
setFixedSize(int w,int h) 
setFixedSize(QSize s)  
setFixedWidth(int w) 
setFixedHeight(int h) 
 7。鼠标事件

self.isLeftPressDown = False #鼠标左键是否按下 
        self.dragPosition=0     #拖动时坐标 
        self.Numbers = self.enum(UP=0, DOWN=1, LEFT=2, RIGHT=3, LEFTTOP=4, LEFTBOTTOM=5, RIGHTBOTTOM=6, RIGHTTOP=7, NONE=8) #枚举参数 
        self.setMinimumHeight(500)  #窗体最小高度 
        self.setMinimumWidth(1000) #窗体最小宽度 
        self.dir=self.Numbers.NONE #初始鼠标状态 
        self.setMouseTracking(True)  

8。 在MainWindow中显示图像的方法 
一是直接使用PIL或matplotlib来显示: 
二是使用Qt designer中的Label和GraphicsView两个控件,具体显示操作如下:i

mgname,imgtype = QFileDialog.getOpenFileName(self,
                            "打开图像","",
                            "*.jpg;;*.png;;*.jpeg;;*.bmp;;All Files(*)")
img = QPixmap(imgname).scaled(self.imglabel.width(),self.imglabel.height())
#scaled(self.imglabel.width(),self.imglabel.height())为图像尺寸缩放
"""QLabel控件显示"""
self.imglabel.setPixmap(img)

"""QGraphicsView控件显示"""
scene = QGraphicsScene(self)
scene.addItem(QGraphicsPixmapItem(img))
self.graphicsView.setScene(scene)

"""使用PIL原带的函数显示"""
from PIL import Image
im = Image.open(imgname)
im.show()
"""使用matplotlib的函数显示"""
import matplotlib.pyplot as plt
plt.figure(1)
plt.imshow(im)
plt.show()12345678910111213141516171819202122

上面代码放在主窗口显示操作类中,如下

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from MyImgProprecessGUI import Ui_MainWindow
from PIL import Image
import matplotlib.pyplot as plt

class MyMainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(MyMainWindow,self).__init__()
        self.setupUi(self)
        #单开图像菜单OpenImg
        self.OpenImg.triggered.connect(self.OpenImage)
    """============图像处理部分==============="""

    def OpenImage(self):
        imgname,imgtype = QFileDialog.getOpenFileName(self,
                            "打开图像","",
                            "*.jpg;;*.png;;*.jpeg;;*.bmp;;All Files(*)")
        #获得图像
        img = QPixmap(imgname).scaled(self.imglabel.width(),self.imglabel.height())

        #在label中显示图像
        self.imglabel.setPixmap(img)
        #在GraphicsView中显示图像
        scene = QGraphicsScene(self)
        scene.addItem(QGraphicsPixmapItem(img))
        self.graphicsView.setScene(scene)

        #打开图像在pycharm中另为打开显示窗口
        im = Image.open(imgname)
        #im.show()
        plt.figure(1)
        plt.imshow(im)
        plt.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = MyMainWindow()
    main.show()
    sys.exit(app.exec_())
发布了212 篇原创文章 · 获赞 40 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/dujuancao11/article/details/105254668