美文网首页
Python PyQt5 GUI编程 常用控件 踩坑 属性及信号

Python PyQt5 GUI编程 常用控件 踩坑 属性及信号

作者: 小白走江湖 | 来源:发表于2020-05-15 00:10 被阅读0次

    ① 问题: 一直想做一个自动化监控的执行文件, 在排版的时候Treeview遇到空白行的问题,网上也搜遍了 很少相关的, 可能是创建的时候出现的bug

    如下图


    微信截图_20200515000413.png
    我使用的如下代码简易创建的, 后置创建标题
        table = ttk.Treeview(root, columns=stock_title)
    
    

    解决办法: 在Treeview中加入标题显示(具体原因未知)

    ttk.Treeview(root, show="headings", columns=stock_title)
    
    微信截图_20200515000648.png

    ② 问题:引入图标后一直报错 faied execute to script xxx

     我在创界界面的时候, 修改图界面图标元素造成这样的问题,iconbitmp("xxxxx.ico")
    
    解决办法: terminus 执行 pyinstall -D xxx.py
    - 会看到dist目录下面新生成一个xxx的目录
    - 进入到目录 直接运行xxx.exe文件, 然后就能看到控制台报错, 对应解决
    PS: GUI编程的时候引入图片打包, 最好要引入绝对路径, 不然会报错
    

    ③: ComboBox属性:

    image.png

    ④: LineEdit 控件的方法与信号

    image.png
    image.png
    image.png

    PyQt5 常用的窗口事件

    setWindowFlag(Qt_WindowType)
    Qt.WindowFlag在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()函数可获取当前窗口的类型。
    
    - 下面是一些常用的属性操作
    
    MSWindowsFixedSizeDialogHint - 禁止调整窗口尺寸;
    FramelessWindowHint - 去除边框和标题栏;不能调整、移动窗口;
    NoDropShadowWindowHint - 去除窗口的阴影;
    CustomizeWindowHint - 去除边框和标题栏, 但增加bulk效果,尺寸可调整;
    WindowTitleHint - 增加窗口标题;
    WindowSystemMenuHint - 增加系统菜单和关闭按钮;
    WindowMinimizeButtonHint - 增加最小化按钮;
    WindowMaximizeButtonHint - 增加最大化按钮;
    WindowMinMaxButtonsHint-增加最小化、最大化按钮;;
    WindowCloseButtonHint-增加关闭按钮;
    WindowContextHelpButconHint-增加帮助按钮;;
    WindowStaysOnTopHint - 将窗口置顶:
    WindowStaysOnBottomHint - 将窗口置底。
    
    

    QTableWiget 控件

    QTableWidget
    前言
    QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem。用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的
    
    QTableWidget类中的常用方法
    方法  描述
    setROwCount(int row)    设置QTableWidget表格控件的行数
    setColumnCount(int col) 设置QTableWidget表格控件的列数
    setHorizontalHeaderLabels() 设置QTableWidget表格控件的水平标签
    setVerticalHeaderLabels()   设置QTableWidget表格控件的垂直标签
    setItem(int ,int ,QTableWidgetItem) 在QTableWidget表格控件的每个选项的单元控件内添加控件
    horizontalHeader()  获得QTableWidget表格控件的表格头,以便执行隐藏
    rowCount()  获得QTableWidget表格控件的行数
    columnCount()   获得QTableWidget表格控件的列数
    setEditTriggers(EditTriggers triggers)  设置表格是否可以编辑,设置表格的枚举值
    setSelectionBehavior    设置表格的选择行为
    setTextAlignment()  设置单元格内文本的对齐方式
    setSpan(int row,int column,int rowSpanCount,int columnSpanCount)    合并单元格,要改变单元格的第row行,column列,要合并rowSpancount行数和columnSpanCount列数
    row:要改变的行数
    column:要改变的列数
    rowSpanCount:需要合并的行数
    columnSpanCount:需要合并的列数
    setShowGrid()   在默认情况下表格的显示是有网格的,可以设置True或False用于是否显示,默认True
    setColumnWidth(int column,int width)    设置单元格行的宽度
    setRowHeight(int row,int height)    设置单元格列的高度
    编辑规则的枚举值类型
    选项  值   描述
    QAbstractItemView.NoEditTriggers0No 0   不能对表格内容进行修改
    QAbstractItemView.CurrentChanged1Editing    1   任何时候都能对单元格进行修改
    QAbstractItemView.DoubleClicked2Editing 2   双击单元格
    QAbstractItemView.SelectedClicked4Editing   4   单击已经选中的内容
    QAbstractItemView.EditKeyPressed8Editing    8   当修改键按下时修改单元格
    QAbstractItemView.AnyKeyPressed16Editing    16  按任意键修改单元格
    QAbstractItemView.AllEditTriggers31Editing  31  包括以上所有条件
    表格选择行为的枚举值
    选择  值   描述
    QAbstractItemView.SelectItems0Selecting 0   选中单个单元格
    QAbstractItemView.SelectRows1Selecting  1   选中一行
    QAbstractItemView.SelectColumns2Selecting   2   选中一列
    单元格文本水平对齐方式
    选项  描述
    Qt.AlignLeft    将单元格内的内容沿单元格的左边缘对齐
    Qt.AlignRight   将单元格内的内容沿单元格的右边缘对齐
    Qt.AlignHCenter 在可用空间中,居中显示在水平方向上
    Qt.AlignJustify 将文本在可用空间内对齐,默认从左到右
    单元格文本垂直对齐方式
    选项  描述
    Qt.AlignTop 与顶部对齐
    Qt.AlignBottom  与底部对齐
    Qt.AlignVCenter 在可用空间中,居中显示在垂直方向上
    Qt.AlignBaseline    与基线对齐
    
    
    
    
    然后我们就来看看QTableWidget中常用的方法。
    
    首先生成一个MyTable=QTableWidget()
    
    1.设置表单样式
    
    设置列数:MyTable.setColumnCount(3)
    
    设置行数:MyTable.setRowCount(4)
    
    设置默认列宽:myTable.horizontalHeader().setDefaultSectionSize(200)
    
    设置默认行高:myTable.verticalHeader().setDefaultSectionSize(300)
    
    设置某一列宽:myTable.horizontalHeader().resizeSection(0,300) #设置第一列的宽度
    
    设置某一行高:myTable.verticalHeader().resizeSection(0,500) #设置第一行的高度
    
    设置某一列宽:
    
    设置某一列高:
    
    设置横向表头的高度:myTable.horizontalHeader().setFixedHeight(100),且只能用该类方法设置横向表头的高度,
    
    设置纵向表头的宽度:myTable.verticalHeader().setFixedWidth(300) ,且只能用该类方法设置纵向表头的宽度
    
    设置表头不可点击:myTable.verticalHeader().setClickable(False)
    
    设置表头字体加粗:font=myTable.horizontalHeader().font()
    
                                    font.setBold(False)
                                    myTable.horizontalHeader().setFont(font)   是指整个横向表头
    
    设置表头不塌陷:myTable.horizontalHeader().setHighlightSections(False)
    
    设置表头内某个元素的颜色:item=myTable.horizontalHeaderItem(1)
                                                   item.setTextColor(QColor("red"))   ,设置横向表头第二个元素的颜色
    
    设置表头内某个元素的字体加粗:font=QFont()
                                                         font.setBold(True)
                                                         item=myTable.horizontalHeaderItem(0)
                                                         item.setFont(font), 设置横向表头第一个元素的字体加粗
    
    设置表头内容:list=[u'宝贝',u'日子',u'多个',u'话费']
                             myTable.setHorizontalHeaderLabels(list)
    
    设置表格内容的填充属性:
    
    设置隐藏表头:myTable.horizontalHeader().setVisible(False)
    
    设置表格外部无边框:myTable.setFrameShape(QFrame.Box)
    
    设置不显示格子线:myTable.setShowGrid(False)
    
    设置表格的编辑属性:QAbstractItemView.NoEditTriggers:不可编辑
    
                                        QAbstractItemView.CurrentChanged:改变了即可编辑
    
                                        QAbstractItemView.DoubleClicked:连续双击即可编辑
    
                                        QAbstractItemView.SelectedClicked:在被选中的情况下单击一次即可编辑
    
                                        QAbstractItemView.EditKeyPressed:在按下平台的编辑键那个项目上即可编辑
    
    选择时每次选择一行:myTable.setSelectionBehavior(QAbstractItemView.SelectRows),
    
                                        也可以设置参数为SelectColumns,这样就会选择一列。
    
    选择表格模式:myTable.setSelectionMode(QAbstractItemView.ExtendedSelection)
    
    
    

    -- QtableWiget 信号

    activated(QModelIndex) 当用户激活index指定的项目时,发出信号
    cellActivated(int,int) 单元格被激活时,发出信号,并传递(行,列)
    cellChanged(int,int) 单元格中的项目数据发生更改时,发出信号,并传递(行,列)
    cellClicked(int,int) 单击表格中的单元格,发出信号,并传递(行,列)
    cellDoubleClicked(int,int) 双击表格中的单元格,发出信号,并传递(行,列)
    cellEntered(int,int) 当鼠标光标进入单元格时,发出信号,并传递(行,列)
    cellPressed(int,int) 按下表格中的单元格,发出信号,并传递(行,列)
    clicked(QModelIndex) 左键单击鼠标按钮时,发出此信号
    currentCellChanged(int,int,int,int) 单元格发生变化,发出信号(当前单元格的行列,先前具有焦点的单元格行列)
    currentItemChanged(QTableWidgetItem*,QTableWidgetItem*) 项目发生变化,发出信号(当前项目,先前项目)
    doubleClicked(QModelIndex) 双击鼠标按钮时,发出此信号
    entered(QModelIndex) 当鼠标光标进入index指定的项目时,发出此信号
    iconSizeChanged(QSize) 在视图可见时设置此图标大小时,发出此信号
    itemActivated(QTableWidgetItem*) 表中项目被激活时,发出信号,并传递(项目)
    itemChanged(QTableWidgetItem*) 表中项目数据发生变化,发出信号,并传递(项目)
    itemClicked(QTableWidgetItem*) 单击表中的项目,发出信号,并传递(项目)
    itemDoubleClicked(QTableWidgetItem*) 双击表格中的项目,发出信号,并传递(项目)
    itemEntered(QTableWidgetItem*) 当鼠标光标进入项目时,发出信号,并传递(项目)
    itemPressed(QTableWidgetItem*) 按下表格中的项目,发出信号,并传递(项目)
    itemSelectionChanged() 选择发生变化,发出信号
    pressed(QModelIndex) 按下鼠标按钮时会发出此信号
    viewportEntered() 当鼠标光标进入视图时会发出此信号
    

    ModuleNotFoundError: No module named 'PyQt5.sip'

    pip install --upgrade pyqt5
    

    当使用installEventFilter(注册按钮的其他事件) 的时候 在eventFilter 遇到 这种提示maximum recursion depth exceeded while calling a Python object

    解决办法: 记得过滤当前按钮来源, 因为当前页面可能很多个空间造成数据深度太大, 页面卡死的情况
    

    相关文章

      网友评论

          本文标题:Python PyQt5 GUI编程 常用控件 踩坑 属性及信号

          本文链接:https://www.haomeiwen.com/subject/ibafohtx.html