• QMainWindow和QWidget


     

     一、QMainWindow

      QmainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如将工具栏、菜单栏、状态栏等添加到布局管理器中。

      窗口类型介绍:QMainWindow、QWidget、QDialog三个类都可以用来创建窗口,可以直接使用,也可以继承后使用。

      QMainWindow窗口包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。

      QDialog是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。他没有菜单栏、工具栏、状态栏等。

      如果是主窗口,就使用QMainWindow类;

      如果是对话框,就使用QDialog类;

      如果不确定,有可能作为顶层窗口,也有可能嵌入到其他窗口,就使用QWidget类。

      QMainWindow类中比较重要的方法:

      

    方法                                                            描述                                                         
    addToolBar()

    添加工具栏

    centralWidget() 返回窗口中心的一个控件,未设置时返回None
    menuBar() 返回主窗口的菜单栏
    setCentralWidget() 设置窗口中心的控件
    setstatusBar() 设置状态栏
    statusBar() 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout = 0)方法,显示状态栏信息。第一个参数是要显示的信息,第二个参数是信息停留的时间,单位是ms,默认值为0,表示一直显示状态栏信息。

    QmainWindow有自己的布局,它不能再设置布局了

    1、创建主窗口

     1 import sys
     2 from PyQt5.QtWidgets import QMainWindow, QApplication
     3 from PyQt5.QtGui import QIcon
     4 
     5 class MainWindow(QMainWindow):
     6     def __init__(self, parent = None):
     7         super(MainWindow, self).__init__(parent)
     8         self.resize(400, 200)
     9         self.status = self.statusBar()
    10         self.status.showMessage('这是状态栏显示', 5000)
    11         self.setWindowTitle('PyQt MainWindow例子')
    12 
    13 
    14 if __name__ == '__main__':
    15     app = QApplication(sys.argv)
    16     app.setWindowIcon(QIcon(r'F:火狐浏览器下载的文件	est.jpg'))
    17     form = MainWindow()
    18     form.show()
    19     sys.exit(app.exec_())

    结果:

    注意这里状态栏信息会显示5秒(代码里面设置了5秒)

    2、主窗口居中显示

     1 from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
     2 import sys
     3 
     4 class winform(QMainWindow):
     5     def __init__(self, parent = None):
     6         super(winform, self).__init__(parent)
     7         self.setWindowTitle('主窗口放在屏幕中间的例子')
     8         self.resize(400, 200)
     9         self.center()
    10 
    11     def center(self):
    12         screen = QDesktopWidget().screenGeometry() #计算显示屏的尺寸
    13         size = self.geometry()          #计算qwidget的窗口大小
    14         self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)  #把窗口移动到屏幕正中央
    15 
    16 if __name__ == '__main__':
    17     app = QApplication(sys.argv)
    18     win = winform()
    19     win.show()
    20     sys.exit(app.exit(app.exec_()))

    结果:

    在这里使用了QDeskWidget类用来显示计算机显示屏的一些参数信息。然后调用move函数将窗体移动到屏幕正中央。

    3、关闭主窗口

     1 from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QHBoxLayout
     2 import sys
     3 
     4 class winform(QMainWindow):
     5     def __init__(self, parent = None):
     6         super(winform, self).__init__(parent)
     7         self.setWindowTitle('关闭主窗口例子')
     8         self.button1 = QPushButton('关闭主窗口1')
     9         # self.button2 = QPushButton('关闭主窗口2')
    10         self.button1.clicked.connect(self.onButtonClick)  #绑定动作函数
    11         # self.button2.clicked.connect(self.onButtonClick)  #绑定动作函数
    12 
    13         layout = QHBoxLayout()
    14         layout.addWidget(self.button1)
    15         # layout.addWidget(self.button2)
    16 
    17         main_frame = QWidget()
    18         main_frame.setLayout(layout)
    19         self.setCentralWidget(main_frame)
    20 
    21     def onButtonClick(self):
    22         #sender是发送信号的对象,此处发送信号的对象是button1按钮
    23         sender = self.sender()
    24         print(sender.text() + '被按下了')
    25         qApp = QApplication.instance()
    26         qApp.quit()
    27 
    28 if __name__ == '__main__':
    29     app = QApplication(sys.argv)
    30     form = winform()
    31     form.show()
    32     sys.exit(app.exec_())

     结果:

    这里在主窗口上面添加了一个Button按钮控件,并将其绑定到onButtonClick函数上面。当按下按钮的时候,会调用onButtonClick函数,该函数里面又调用了quit函数。主窗口退出。

    二、QWidget

      基础窗口控件QWidget类是所有用户界面对象的基类,所有窗口或者控件都直接或间接继承自QWidget类。

    1、QWidget不包含边框的常用函数

    • 改变用户区的面积:
      QWidget.resize(width, height)
      QWidget.resize(Qsize)
    • 获得用户区的大小:
      QWidget.size()
    • 获得用户区的宽度和高度:
      QWidget.width()
      QWidget.height()
    • 设置客户区的高度、宽度、和面积(形成的窗体不可以使用鼠标来改变大小)
      QWidget.setFixedHeight()
      QWidget.setFixedWidth()
      QWidget.setFixedSize()
    • 设置客户区的大小和位置:

      Qwidget.setGeometry(int x, int y, int width, int height)#位置和大小

     2、QWidget包含边框的常用函数

    • 获得窗体的大小和位置
      QWidget.frameGeometry()
    • 设置窗口的位置
      QWiget.move(int x, int y)
    • 获得窗口左上角的的坐标
      QWidget.pos()

    3、屏幕坐标系统显示

     1 from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
     2 import sys
     3 
     4 app = QApplication(sys.argv)
     5 widget = QWidget()
     6 btn = QPushButton(widget)
     7 btn.setText("Button")
     8 
     9 #以QWidget左上角为(0, 0)点
    10 btn.move(20, 20)
    11 
    12 widget.resize(300, 200)     #设置窗口的大小
    13 widget.move(250, 200)       #设置窗口的位置   以显示屏作为标准
    14 
    15 widget.setWindowTitle('PyQt坐标系统例子')
    16 widget.show()
    17 print('QWidget:')
    18 print('w.x() = %d'%widget.x())      #窗体的位置
    19 print('w.y() = %d'%widget.y())
    20 print('w.width() = %d'%widget.width())      #窗体的尺寸
    21 print('w.height() = %d'%widget.height())
    22 print('QWidget.geometry')
    23 print('widget.geometry().x() = %d'%widget.geometry().x())       #窗体用户区(即不包含边框)的位置
    24 print('widget.geometry().y() = %d'%widget.geometry().y())
    25 print('widget.geometry().width() = %d'%widget.geometry().width())       #窗体用户区(即不包含边框)的位置
    26 print('widget.geometry().height() = %d'%widget.geometry().height())
    27 
    28 sys.exit(app.exec_())

    结果:

    4、建立一个主窗口

     

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.resize(300, 200)
    window.move(250, 150)
    window.setWindowTitle('hello PyQT5')
    window.show()
    
    sys.exit(app.exec_())

     结果:

     5、设置程序图标

     1 import sys
     2 from PyQt5.QtWidgets import QApplication, QWidget
     3 from PyQt5.QtGui import QIcon
     4 
     5 class Icon(QWidget):
     6     def __init__(self, parent = None):
     7         super(Icon, self).__init__(parent)
     8         self.initUI()
     9 
    10     def initUI(self):
    11         self.setGeometry(300, 300, 1250, 150)
    12         self.setWindowTitle('程序图标')
    13         self.setWindowIcon(QIcon(r'F:火狐浏览器下载的文件	est.jpg'))
    14 
    15 if __name__ == '__main__':
    16     app = QApplication(sys.argv)
    17     icon = Icon()
    18     icon.show()
    19     sys.exit(app.exec_())

     结果:

    6、显示气泡提示信息

     1 import sys
     2 from PyQt5.QtWidgets import QApplication, QWidget, QToolTip
     3 from PyQt5.QtGui import QFont
     4 
     5 class winform(QWidget):
     6     def __init__(self):
     7         super().__init__()
     8         self.initUI()
     9 
    10     def initUI(self):
    11         QToolTip.setFont(QFont('SansSerif', 10))
    12         self.setToolTip('这是一个<b>气泡提示</b>')
    13         self.setGeometry(200, 300, 400, 400)
    14         self.setWindowTitle('气泡提示demo')
    15 
    16 if __name__ == '__main__':
    17     app = QApplication(sys.argv)
    18     win = winform()
    19     win.show()
    20     sys.exit(app.exec_())

     结果:

    当鼠标放置在窗体上时候,会出现该气泡提示。

  • 相关阅读:
    09.MyBatis的逆向工程
    08.MyBatis整合Log4j
    07.MyBatis中的关联查询
    06.动态SQL和foreach
    05.MyBtais两种取值符号以及输入参数和输出参数
    04.MyBatis别名的设置和类型转换器
    03.Mybatis优化
    02.Mybatis的动态代理方式实现增删改查
    01.MyBatis入门
    网络安全之网络安全(数通安全)0
  • 原文地址:https://www.cnblogs.com/hexiaoqi/p/10160925.html
Copyright © 2020-2023  润新知