精华内容
下载资源
问答
  • 分頁控件的使用

    2019-10-05 13:36:47
    1、也许讲解有点初级,希望高手不要“喷”我,因为我知道并是每一个人都是高手,我也怕... 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址AspNetPager.rar第二步:在项目bin文件夹下引用AspNetPa...

    1、也许讲解有点初级,希望高手不要“喷”我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13,小生不才;
    2、如有什么不对的地方,还希望大家指出,一定虚心学习;
    3、本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢。
    下面开讲:
    第一步:首先是下载一个AspNetPager.dll 下载地址 
    AspNetPager.rar
    第二步:在项目的bin文件夹下引用AspNetPager.dll 如图:

    第三步:在工具箱添加AspNetPager控件,如图:

    接下来再如图:

    这样的话我们就已经成功的添加了AspNetPager控件,把它拖到页面上就可以使用啦!→_→,好吧,距成功就差一步之遥了...

    第四步:代码部分,我以Repeater控件为例,其他数据控件,例如GridView、Datalist等一样使用...

    前台代码:

    复制代码 代码如下:

    <webdiyer:AspNetPager ID="AspNetPager1" runat="server" PageSize="10"
    HorizontalAlign="Center" Width="100%"
    meta:resourceKey="AspNetPager1" Style="font-size: 14px"
    AlwaysShow="false" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页"
    PrevPageText="上一页" SubmitButtonText="Go" SubmitButtonClass="submitBtn"
    CustomInfoStyle="font-size:14px;text-align:left;"
    InputBoxStyle="width:25px; border:1px solid #999999; text-align:center; "
    TextBeforeInputBox="转到第" TextAfterInputBox="页 " PageIndexBoxType="TextBox"
    ShowPageIndexBox="Always" TextAfterPageIndexBox="页"
    TextBeforePageIndexBox=" 转到" Font-Size="14px" CustomInfoHTML="共<font color='#ff0000'>%PageCount%</font>页,第<font color='#ff0000'>%CurrentPageIndex%</font>页"
    ShowCustomInfoSection="Left" CustomInfoSectionWidth="19%"
    PagingButtonSpacing="3px" onpagechanged="AspNetPager1_PageChanged">
    </webdiyer:AspNetPager>


    后台代码:

    复制代码 代码如下:

    private void DatasBind()
    {
    this.AspNetPager1.RecordCount = ds.Tables[0].Rows.Count;
    PagedDataSource pds = new PagedDataSource();
    pds.AllowPaging = true;
    pds.PageSize = AspNetPager1.PageSize;
    pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
    pds.DataSource = ds.Tables[0].DefaultView;
    rpttandy.DataSource = pds;
    rpttandy.DataBind();
    }
    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
    DatasBind();
    }



    好了,以上就是我今天与大家分享的用AspNetPager.dll对asp.net服务器控件分页的方法,我想我的讲解已经够详细了吧,有不光有文字和代码,还有图片,顶一个吧!这主要的是为我下次与大家分享自己写存储过程分页做个铺垫,敬请期待哦!

    转载于:https://www.cnblogs.com/sdya/p/3964639.html

    展开全文
  • 网页控件OCX

    2013-08-12 18:48:30
    ocx 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。下面说说什么是 ocx 控件。 OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control eXtension)。 ocx 是可执行的文件。 如果你用...

    转自:

    概述

    .
    ocx 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。下面说说什么是 ocx 控件。
    OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control eXtension)。
    ocx 是不可执行的文件。
    如果你用过 Visual Basic 或者 Delphi 一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox,Timer 等等。每个控件都有自己的事件、方法和属性。
    使用了控件的编程非常容易。在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等,在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如,你可以在 VB 中嵌入用 VC 开发的控件。

    编辑本段详细信息

    控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX的格式出现的,后来变成了.OCX。由于Internet的广泛流行,微软公司推出了ActiveX技术,就是从OLE发展起来的,加入了WWW上的功能。所以目前最流行的是ActiveX控件。
    ActiveX控件.ActiveX控件是可重用的软件组件。使用它可以很快地在网络应用程序、桌面应用程序、以及开发工具中加入特殊的功能。ActiveX控件的使用者可以无需知道这些组件是如何开发的,便可以完成网页或应用程序的设计。
    对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序。OCX提供操作滚动条移动和视窗恢复尺寸的功能。如果你有Windows系统,你会发现在你的Windows地址录里有大量OCX文件名后缀的文件。 对象链接和嵌入(OLE)被设计来支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。OLE和组件对象模型(COM继OLE后的更常用的概念)支持“即插即用”程序的发展,“即插即用”程序在系统中可以用任何语言写入并可以由任何应用程序动态地使用。这些程序被认为是他们在其上运行的container的组建和应用程序。这种基于组件的近似应用程ˉ序的发展缩减了程序调试时间并改善了程序的性能和品质。Windows应用发展程序(比如powerbuilder和Microsoft Access)具有OCX的优势。

    编辑本段注册方式

    ocx控件的安装方式有很多种,这里介绍最简单的一种。
    步骤:
    1.进入开始,点击运行。
    2.在出现的框中键入regsvr32 C:\xxxx.ocx 。(XXXX为控件名, C:\为目录))(regsvr32 E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)
    3.点击确认后等待出现提醒注册成功即可。
    oca 文件
    Oca文件不是控件,其中保存Ocx控件的属性
    ocx的注销
    1.进入开始,点击运行。
    2.在出现的框中键入regsvr32 /u C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx
    3.点击确认后等待出现提醒注销成功即可。

    编辑本段可能出现问题

    同一个OCX的多个控件在同一窗体上会出现问题的问题,主要原因是不能有全局变量(或共享数据) ,应该尽量定义成类的成员变量,全局变量在同一个进程中要被共享的。

    展开全文
  • 上一章将的QObject是PyQt里所有控件的基类,并不属于可视化的控件。这一章所讲的QWidget,是所有可视化控件的基类。 QWidget包含下面几点特性 a.控件是用户界面的最小的元素 b.每个控件都是矩形的,他们按照Z轴...

    上一章将的QObject是PyQt里所有控件的基类,并不属于可视化的控件。这一章所讲的QWidget,是所有可视化控件的基类。

    QWidget包含下面几点特性

    a.控件是用户界面的最小的元素

    b.每个控件都是矩形的,他们按照Z轴顺序排序(垂直于桌面),前面的会覆盖后面的

    c.控件由其父控件和前面的控件裁剪

    d.没有父控件的控件就是窗口

    功能与作用

    1.控件的创建

    我们在上一章在创建了控件以后用Obj.setParent()的指定了控件的父子关系,在这里就有更简单的方法了!

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    window = QWidget()
    window.resize(800,600)
    red = QWidget(window)
    red.setStyleSheet('background-color:red;')
    red.resize(100,100)
    window.show()
    sys.exit(app.exec_())
    控件的创建

    这个方法里就是用继承的方式在窗口里创建了新的界面。

    2.大小和位置

    首先我们要理解空间的坐标系统,控件的坐标原点在左上角,向右为x轴正方向,向下为y轴的正方向。顶层窗口的原点为显示器的左上角,而子控件的原点在父控件的左上角。每个值为一个分辨率。

    其次我们看一下大小位置相关的API

    a.获取

    window = QWidget()
    window.x()            #控件X轴坐标(包含框架窗口)
    window.y()            #控件Y轴坐标(包含框架窗口)
    window.pos()          #控件X/Y轴坐标集合
    window.width()        #控件宽度(不包含窗口框架)
    window.height()       #控件高度(不包含窗口框架)
    window.size()         #控件宽度和高度的组合
    window.geometry()     #用户区域相对于父控件的位置和尺寸组合
    window.rect()         #(0,0,width,height)的组合
    window.frameSize()    #整个界面大小(包含框架窗口)
    window.frameGeometry()#整个界面(X,Y,Width,height)的集合

    用一个图可以描述一下

    b设置

    window.move(x,y)                        #控件移动至x,y;包含窗口框架
    window.resize(width,height)             #设置宽、高,不包含窗口框架
    window.setGeometry(x,y,width,height)    #设置用户区域的坐标和大小
    window.adjustSize()                     #根据内容自适应尺寸
    window.setFixedSize(width,height)      #设置固定尺寸 设置后窗口最大化按钮是灰色的,窗口不可拖放

     用一个案例来演示一下,定义一个界面,上面按每行平均放3个来布局。

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    window = QWidget()
    window.resize(800,800)
    widget_num = 20    #放置控件个数
    
    ###########计算宽度##########
    widget_width = window.width()/3         #每行有3个控件
    ###########计算宽度##########
    
    ###########计算高度##########
    row = (widget_num - 1)//3+1         #每行3个,获取行数
    widget_height = window.height()/row
    ###########计算高度##########
    
    for i in range(0,widget_num):
        a = QLabel(window)
        a.resize(widget_width,widget_height)
        a.setStyleSheet('background-color:red;border:1px solid yellow;font-size:22px;')
        a.setText(str(i))
    
    ###########移动位位置##########
        a.move(i % 3 * widget_width, i // 3 * widget_height)     #i%3是列号,i//3为行号
    ###########移动位位置##########
    
    window.show()
    sys.exit(app.exec_())
    位置大小案例

    要注意的是在移动的时候是计算了行号和列号,在乘以控件大小即可实现。

    3.最大尺寸和最小尺寸

    a.获取

    window = QWidget()
    window.minimumWidth()   #最小宽度
    window.minimumHeight()  #最小高度
    window.minimumSize()    #最小尺寸
    window.maximumWidth()   #最大宽度
    window.maximumHeight()  #最大高度
    window.maximumSize()    #最大尺寸

    b.设置

    window = QWidget()
    window.setMaximumWidth(width)           #最大宽度
    window.setMaximumHeight(height)         #最大高度
    window.setMaximumSize(width,height)     #最大尺寸
    window.setMinimumWidth(width)           #最小宽度
    window.setMinimumHeight(height)         #最小高度
    window.setMinimumSize(width,height)     #最小尺寸

     设定完最大/小尺寸,用鼠标拖拽尺寸时会被限制,还有一点,

    window.setMaximumSize(500,800)
    window.resize(1000,1000)

    运行后的尺寸还是500*800。并且手动拖拽限制了最大尺寸。

     4.内容边距

    先看一下内容边距的相关API

    label.contentsRect()                            #获取标签内容可以显示的范围
    label.getContentsMargins()                      #获取内容左上右下边距(未定义边距时为(0,0,0,0)
    label.setContentsMargins(up,down,left,right)    #设定内容区域(左上右下)

     距离的定义是这样的

     5.鼠标操作

    a.设置鼠标形状

    window.setCursor(鼠标类型)

     鼠标类型有定义好的枚举值,只要根据需求输入就可以了

    Qt.UpArrowCursor     #候选
    Qt.CrossCursor       #精准选择
    Qt.IBeamCursor       #文本选择
    Qt.BusyCursor        #后台运行
    Qt.WaitCursor        #
    Qt.ForbiddenCursor   #不可用
    Qt.PointingHandCursor#连接选择
    Qt.WhatsThisCurso    #帮助选择
    Qt.SizeVerCursor     #垂直调整大小
    Qt.SizeHorCursor     #水平调整大小
    Qt.SizeBDiagCursor   #延对角线调整大小2
    Qt.SizeAllCursor     #移动
    Qt.SplitVCursor      #垂直分割(无图示)
    Qt.SplitHCursor      #水平分割(无图示)
    Qt.OpenHandCursor    #伸开的手掌(无图示)
    Qt.ClosedHandCursor  #缩紧的拳头(无图示).
    Qt.BlankCursor       #空白
    常用鼠标图标枚举值

    上面对应的图是Win10的常规鼠标设置

     b.自定义鼠标

    出了默认的鼠标图像,还可以用自定义图片(位图)

    pic = QPixmap(r'C:\Users\Aaron\Desktop\111.bmp')     #加载位图路径
    pic2 = pic.scaled(10,10)                             #对图片进行缩放
    cursor = QCursor(pic2)                               #自定义鼠标图片
    label.setCursor(cursor)

    这里有个要注意的地方,常规的鼠标是有个小箭头的,比如一个按钮,必须是箭头的尖尖指到了才可以点击,而不是只要这个箭头在按钮上就能使用。所以,我们在定义是有两个参数是可以设置的

    QCursor(bitmap,hotX,hotY)

    bitmap就是位图的地址,绝对路径或相对路径都是可以的。而hotX和hotY就是上面说鼠标尖尖的位置。如果鼠标的图像是10*10的,把hotX,hotY设置成(10,10)就是鼠标的右下角在按钮上才可以点击按钮。

    c.鼠标恢复到初始状态

    label.setCursor(cursor)

    d.鼠标获取

    current_cursor = label.cursor()
    current_cursor.pos()             #获取鼠标位置
    current_cursor.setPos(x,y)       #设定鼠标位置

    这里获取的鼠标坐标对应的原点是桌面,而不是父控件。

    e.鼠标跟踪

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class MyWidget(QWidget):
        def mouseMoveEvent(self, a0):
            print(self.cursor().pos())
    window = MyWidget()
    window.setMouseTracking(True)   #开启鼠标追踪
    print(window.hasMouseTracking())
    window.show()
    sys.exit(app.exec_())
    鼠标追踪

    如果不启动鼠标追踪,只有改变了鼠标按键状态(左右键和滚轮)才启动了追踪

    演示一个鼠标追踪的案例,在window里定义一个label,label的位置随着鼠标的移动而改变

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class MyWindow(QWidget):
        def mouseMoveEvent(self, a0):
            label = self.findChild(QLabel)
            label.move(a0.localPos().x(),a0.localPos().y())  #localPos()是控件内坐标
            label.setText(str(a0.localPos().x())+'\n'+str(a0.localPos().y()))
    window = MyWindow()
    window.resize(800,800)
    window.move(200,200)
    window.setMouseTracking(True) #启动鼠标追踪
    label = QLabel(window)
    label.resize(100,100)
    label.setStyleSheet('background-color:red;font-size:24px')
    鼠标追踪案例

     6.事件机制

    事件机制的API

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class MyWindow(QWidget):
        def showEvent(self, a0):
            print('窗口被展开',a0)
        def closeEvent(self, a0):
            print('窗口关闭')
        def moveEvent(self, a0):
            print('窗口移动')
        def resizeEvent(self, a0):
            print('改变窗口尺寸')
        def mousePressEvent(self, a0):
            print('鼠标按下')
        def mouseReleaseEvent(self, a0):
            print('鼠标弹起')
        def mouseDoubleClickEvent(self, a0):
            print('鼠标双击')               #双击时候会触发鼠标弹起
        def enterEvent(self,a0):
            print('鼠标进入控件')
        def leaveEvent(self,a0):
            print('鼠标离开控件')
        def keyPressEvent(self, a0):
            print('键盘上有按键被按下')
        def keyReleaseEvent(self, a0):\
            print('键盘上有按键弹起')
        def focusInEvent(self, a0):
            print('获取焦点')
        def focusOutEvent(self, a0):
            print('失去焦点')
        def dragEnterEvent(self, a0):
            print('拖拽进入控件')
        def dragLeaveEvent(self, a0):
            print('拖拽离开控件')
        def dragMoveEvent(self, a0):
            print('在控件中拖拽')
        def dropEvent(self, a0):
            print('拖拽放下')
        def paintEvent(self, a0):
            print('绘制事件')
        def changeEvent(self, a0):
            print('改变事件')
        def contextMenuEvent(self, a0):
            print('右键菜单')
        def inputMethodEvent(self, a0):
            print('输入法调用')
    window = MyWindow()
    
    
    window.show()
    sys.exit(app.exec_())
    事件API

    事件里的鼠标、键盘事件只是触发了事件,至于是哪个键的响应这里还没说,后期再细说

    7.事件转发机制

    Widget的控件有自己的事件转发机制:如果一个控件没有处理该事件,则该事件会自动传递给父级控件进行处理

    例如上图,一个顶层窗口,一个中间窗口还有一个标签是依次继承的,我们定义一个事件,鼠标点击控件,打印’控件被点击‘,点击中间界面打印’中间界面被点击‘,点击顶层窗口打印’顶层窗口被点击’我们把标签的事件忽略掉,那么事件是会传递给中间界面的。所以,这里要引出一个方法

    class MyLabel(QLabel):
        def mousePressEvent(self, a0):
            a0.ignore()     #忽略事件,把事件传递给父级控件
            a0.isAccepted() #获取是否处理事件
            a0.accept()     #处理事件
    import sys
    from PyQt5.Qt import *
    class MyWindow(QWidget):
        def mousePressEvent(self, a0):
            print('顶层鼠标按下')
    
    class MidWindow(QWidget):
        def mousePressEvent(self, a0):
            print('中间界面被鼠标按下')
    class MyLabel(QLabel):
        def mousePressEvent(self, a0):
            print('标签控件鼠标按下')
            print(a0.isAccepted())
            a0.ignore()              #忽略事件
    app = QApplication(sys.argv)
    
    window = MyWindow()
    window.resize(800,600)
    midwindow = MidWindow(window)
    midwindow.resize(500,500)
    midwindow.setAttribute(Qt.WA_StyledBackground,True)
    midwindow.setStyleSheet('background-color:cyan')
    midwindow.move(50,50)
    label = MyLabel(midwindow)
    label.resize(200,100)
    label.move(100,100)
    label.setStyleSheet('background-color:green;font-size:22px')
    label.setText('这是个标签')
    window.show()
    sys.exit(app.exec_())
    事件转发机制演示

     8.父子关系补充

    API

    window = QWidget()
    label = QLabel(window)
    window.childAt(x,y)    #获取window内x、y坐标位置存在的控件,无控件返回None
    label.parentWidget()     #获取控件的父控件
    window.childrenRect()  #window内所有控件组成的矩形区域(位置、尺寸)(左上角——右下角)

    9层级控制

    由于界面上的控件是按层级显示的,就有可能存在被遮挡的可能。先看下层级控制的API

    obj.lower()     #控件放在最底层
    obj.raise_()    #控件放在最顶层
    a.stackUnder(b) #a放在b下面

    上面所说的控件操作必须是同级的控件。一般情况后定义的控件比先定义的控件层级靠前。

    下面的案例就是两个Label,鼠标点击哪个哪个显示在前面

    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    class MyLabel(QLabel):
        def mousePressEvent(self, ev:QMouseEvent):
            self.raise_()
    window = QWidget()
    window.resize(800,600)
    label1 = MyLabel(window)
    label1.resize(300,300)
    label1.setStyleSheet('background-color:red')
    label2 = MyLabel(window)
    label2.resize(300,300)
    label2.move(50,50)
    label2.setStyleSheet('background-color:green')
    window.show()
    sys.exit(app.exec_())
    层级控制案例

    10.顶层窗口相关操作

     a.设定程序图标

    可以改变这个程序图标

    icon = QIcon(r'图片路径')
    window.setWindowIcon(icon)

    b.标题

    window.setWindowTitle('')

    如果是空字符串了,标题展示的字符串就是默认的Python(像上面的图一样)如果像不现实,设定空格就行了( ‘ ’)

    c.不透明度

    window.setWindowOpacity(0.9)  #0-1对应透明——不透明
    window.windowOpacity()        #返回值是个浮点数

    获取的不透明度是个浮点数,和设定的值有些许差异,比如设定值为设定值为0.9,获取的值为0.8980392156862745

    c.窗口状态

    window.setWindowState(Qt.WindowNoState)         #无状态
    window.setWindowState(Qt.WindowMaximized)       #窗口最大化
    window.setWindowState(Qt.WindowMinimized)       #窗口最小化
    window.setWindowState(Qt.WindowFullScreen)      #窗口全屏
    window.setWindowState(Qt.WindowActive)          #活动窗口
    
    window.windowState()                            #获取控件状态

    活动窗口指的是比如有两个程序,显示在前面的那个就是活动窗口

    d.最大化和最小化

    和上面效果的差不多,设置API

    window.showFullScreen()        #全屏
    window.showMaximized()         #最大化
    window.showMinimized()         #最小化
    window.showNormal()            #正常显示

    判定

    window.isMinimized()
    window.isMaximized()
    window.isFullScreen()

    有一点,用这个设置的方法,可以不用show(),直接能显示窗口。

    e.窗口外观标志

    window.setWindowFlags()

    用这个窗口的标志位设定能修改出很多的效果,下面就列举了标志 的枚举值。

    Qt.MSWindowsFixedSizeDialogHint         #窗口大小无法调整
    Qt.FramelessWindowHint                  #窗口无边框,不可拖动大小,移动位置
    Qt.CustomizeWindowHint                  #无边框,可以拖动大小,不可移动
    Qt.WindowTitleHint                      #标题栏只有关闭按钮(且不可用?)
    Qt.WindowSystemMenuHint                 #效果同上?
    Qt.WindowMaximizeButtonHint             #标题栏内只激活最大化按钮
    Qt.WindowMinimizeButtonHint             #标题栏内只激活最小化按钮
    Qt.WindowCloseButtonHint                #标题栏只有关闭按钮(可用)
    Qt.WindowContextHelpButtonHint          #标题栏只有关闭按钮(不可用)问号按钮(可用)
    Qt.WindowStaysOnTopHint                 #窗口始终显示在最前
    Qt.WindowStaysOnBottomHint              #窗口始终显示在最后
    窗口标志枚举值

     11.交互状态

    控件显示/禁用

    btn.setEnabled()      #设定是否可用
    btn.isEnabled()       #获取是否可用
    btn.setVisible()      #设定是否可见
    btn.setHidden()       #设置隐藏
    btn.isHidden()        #基于父控件是否被隐藏(父控件不显示,子控件是可能不被隐藏的)
    btn.isVisible()       #最终状态是否可见
    btn.isVisibleTo()     #一个控件是否随着另一个控件的显示而显示

    这里要引入几个知识点:

    a我们先运行一下这个程序

    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    class MyWindow(QWidget):
        def paintEvent(self, evt):
            print('窗口被绘制')
            return super().paintEvent(evt)   #不截取绘制的方法,由父类进行绘制
    
    window = MyWindow()
    window.resize(800,600)
    class Btn(QPushButton):
        def paintEvent(self,evt):
            print('按钮被绘制')
            return super().paintEvent(evt)
    
    btn = Btn(window)
    btn.setText('按钮')
    btn.clicked.connect(lambda :btn.setVisible(False))
    
    window.show()
    sys.exit(app.exec_())

    在一个窗口里绘制一个按钮,点击按钮后按钮消失

    运行一下看看会发生什么?

    在运行程序时打印“窗口被绘制”“按钮被绘制”,鼠标指向按钮时按钮颜色发生变化,再次打印“窗口被绘制”“按钮被绘制”,点击按钮后打印“窗口被绘制”

    所以,在每次界面发生改变时,所有的控件都是被依次绘制的。

    b控件的显示时基于父控件的(先画父控件)如果父控件没有被展示,即便将子控件设置visable也不会被展示的。

    c用ishidden()获取状态时,如果父控件没有显示,但是有没有隐藏子控件,返回值是True。

    窗口相关

    被编辑状态

    window.setWindowTitle('调试[*]')
    window.setWindowModified(True)
    print( window.isWindowModified())

    这个有什么用呢?

    看看是不是显示的没有那个中括号了!如果程序被修改可以显示个星星。(貌似用处不大)

    是否为活跃窗口

    window.isActiveWindow()

    注意的是,并不是哪个在前面哪个一定就是活跃窗口

    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    w1 = QWidget()
    w2 = QWidget()
    w1.show()
    w2.show()
    w1.raise_()
    print(w1.isActiveWindow())
    print(w2.isActiveWindow())
    sys.exit(app.exec_())

    运行以后可以发现通过w1.raise_()把界面提至最前,但返回值依旧为false,所以只有获取了焦点才能是活跃窗口。

    关闭控件

    btn =QPushButton(window)
    btn.setAttribute(Qt.WA_DeleteOnClose,True)  #释放内存
    btn.close()     #只是不显示,不释放内存

    释放内存的设置要放在关闭的前面。

    12.信息提示

    a.工具提示:鼠标悬停在控件上一段时间后展示在旁边

    btn.setToolTip('这是个按钮')      #定义提示信息
    btn.setToolTipDuration(1000)    #提示显示时长(ms)
    btn.toolTip()                   #获取控件提示信息
    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    window = QWidget()
    window.resize(800,600)
    btn = QPushButton(window)
    btn.setText('按钮')
    btn.setToolTip('这是个按钮')   #定义提示信息
    btn.setToolTipDuration(1000)    #提示显示时长(ms)
    btn.toolTip()                   #获取控件提示信息
    window.show()
    sys.exit(app.exec_())
    工具提示案例

    b.状态提示:鼠标停在控件上时,展示在状态栏上,顶层窗口需要带状态栏并且激活

    btn.setStatusTip('这是个按钮')   #设定提示信息
    btn.statusTip()                  #获取控件提示信息
    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    window = QMainWindow()    #组合窗口
    window.resize(800,600)
    window.statusBar()       #激活状态栏
    btn = QPushButton(window)
    btn.setStatusTip('这是个按钮')   #设定提示信息
    print(btn.statusTip())            #获取控件提示信息
    window.show()
    sys.exit(app.exec_())
    window.setWindowFlags(Qt.WindowContextHelpButtonHint)
    btn.setWhatsThis('这是个按钮')
    btn.whatsThis()
    btn.setStatusTip('提示信息')
    状态栏提示案例

    c."这是啥?"提示:利用帮助按钮显示提示

    window.setWindowFlags(Qt.WindowContextHelpButtonHint)  #先要启用帮助按钮
    btn.setWhatsThis('这是个按钮')                           #设定提示信息
    btn.whatsThis()                                         #获取提示信息
    import sys
    from PyQt5.Qt import *
    app = QApplication(sys.argv)
    window = QWidget()
    window.resize(800,600)
    btn = QPushButton(window)
    window.setWindowFlags(Qt.WindowContextHelpButtonHint)  #先要启用帮助按钮
    btn.setWhatsThis('这是个按钮')  #设定提示信息
    btn.whatsThis()                 #获取提示信息
    window.show()
    sys.exit(app.exec_())
    帮助按钮提示案例

     13.焦点控制

    首先要明白焦点的定义,比如一个窗口有两个文本输入的控件,键盘输入字符,一个控件显示出输入的字符,那么这个控件就是获取焦点的控件。或者通过tab键切换按钮,也就是切换焦点

    从单个控件角度来看,先看看API

    obj.setFocus()         #获取焦点
    obj.setFocusPolicy()   #设定焦点策略(枚举值)
    obj.clearFocus()       #取消焦点
    Qt.TabFocus   #只能通过Tab键获取焦点
    Qt.ClickFocus #只能通过单击获取焦点
    Qt.StrongFocus#通过上述两种方式获取焦点
    Qt.NoFocus    #禁止通过上述两种方式获取焦点
    焦点获取策略

     还可以从父控件角度来看焦点的控制

    window.focusWidget()                #获取子控件中当前获得焦点的控件
    window.focusNextChild()             #聚焦到下个子控件
    window.focusPreviousChild()         #聚焦到上一个子控件
    window.focusNextPrevChild()         #Ture:下一个   False :上一个
    window.setTabOrder(第一个,第二个)    #设置Tab键获取焦点顺序
    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class Window(QWidget):
        def mousePressEvent(self, a0:QMouseEvent):
            if a0.button() == 1:self.focusNextChild()
            else:self.focusPreviousChild()
    window = Window()
    le1 = QLineEdit(window)
    le2 = QLineEdit(window)
    le3 = QLineEdit(window)
    
    le1.move(100,200)
    le2.move(150,250)
    le3.move(200,300)
    
    window.show()
    sys.exit(app.exec_())
    获取焦点案例二

    案例二就是在界面里有三个文本框,按鼠标左键下一个获得焦点,点击右键上一个获得焦点。

    以上就是QWidget的学习笔记

    转载于:https://www.cnblogs.com/yinsedeyinse/p/10665007.html

    展开全文
  • Matlab GUI控件之——uitable

    千次阅读 2017-06-07 00:15:12
    Matlab GUI控件之——uitableuitable 或说 table,属于MatlabGUI控件中相对冷门的控件,因此相关教程要么少,要么全,但这个控件还是很有价值下面详细介绍一下uitable一些基本知识;开始 初始化初始化...

    Matlab GUI控件之——uitable

    uitable 或说 table,属于Matlab的GUI控件中相对冷门的控件,因此相关的教程要么少,要么不全,但这个控件还是很有价值的,下面详细介绍一下uitable的一些基本知识;

    开始

    添加Table控件
    Table控件

    初始化

    初始化,要添加控件的CreateFcn函数。
    添加Table的CreateFcn函数

    之后在CreateFcn函数下,对其进行基础的设置。
    Table 控件的数据实质上是cell类型,新建一个cell类型的data

    % 在CreateFcn函数下具体的内容
    function uitable1_CreateFcn(hObject, eventdata, handles)
    Data = cell(3,2); %新建一个3行2列的元胞数组
    % 设定具体的内容,如:
    Data(:,1) = {'佳洁士-全优七效';
    '佳洁士-3D炫白';
    '黑人-茶倍健';}; %设置第1列为牙膏的产品名
    Data(:,2) = {15;16;13}; %设置第2列为牙膏的单价
    set(hObject, 'ColumnName', {'产品名','单价'}, 'data',Data) %将数据设置到uitable控件中

    这里需要稍微介绍一下就是:
    此处先自定义好的存储了内容的元胞数组,再用set函数具体传入数据到控件从而完成初始化。其语法大致是这样:
    1. 首先传入控件的句柄,也就是控件的Tag,具体Tag都是自己设定的,我这是默认的: uitable1 。但可以看到,此处写的是hObject,因为这段初始化代码写在控件的CreateFcn函数下,其参数本身就有hObject,可以直接传入set函数。
    2. 'ColumnName' 有基础的都很清楚,引号括起来是其属性,而紧跟其后则是该属性的具体设置的值。’ColumnName’代表是titable的列标题。
    手段
    3. 'data' 字段代表的就是数据,后面紧跟我们存储了内容的元胞数组 Data

    更新

    在使用中,难免需要对表格的数据进行更新,uitable的更新似乎显得有点繁琐,但代码实现并不麻烦,只是让人感觉不那么灵活。
    具体来说:
    1. 先获取其数据:tableData = get(handles.uitable1,'data'); 此时一般就是在别的函数下写的,所以传入Tag handles.uitable1。返回的tableData就是包含内容的元胞数组,可以肆意对其进行更改。
    2. 之后再次:set(handles.uitable1,'data',tableData) 如果列数什么没有变动,则不需要再次设置列名。

    进阶

    1. 很多时候 table 和 excel 表联合使用,但其实并没有特别需要注意的,无非是先写读excel表数据的代码,然后还是一样的流程,将包含数据的元胞数组set入table控件中去。
    2. 文字颜色,如果设置表格中文字的颜色,甚至不同的颜色呢?
      此处我是在网上找到一个很强的解决方案:
      ['<html><FONT color=#76AB2F">' '高露洁-劲白' '</Font></html>'] 根本不像是matlab的语法,实现了指定单元格可以指定颜色。
      附上文章来源: http://www.ilovematlab.cn/thread-89772-1-1.html
      他的思路:“目前的uitable無法在單一表格內設置顏色,不過只要利用與java相同的特性
      就可以達到單一表格顏色的設置
      主要的特性就是能夠接受HTML的部分程序,我嘗試GUI的物件
      可以使用的物件有:listbox、popupmenu、uitable
      按鈕系列是乎也可以不過不穩定,而且並不是所有的HTML都有效果”
      【在下十分佩服,对于其原理我并没有做什么探究,不过那位作者的方法在table里真的很好用】
      举个我做的例子:
      data = cell(3,2); %新建一个三行四列的元胞数组
      data{1,1} = ['<html><FONT color=#0071BC">' '佳洁士-全优七效' '</Font></html>'];
      data{2,1} = ['<html><FONT color=#D85218">' '佳洁士-3D炫白' '</Font></html>'];
      data{3,1} = ['<html><FONT color=#ECB01F">' '黑人-茶倍健' '</Font></html>'];
      temp = {15; 16; 13};
      data{1,2} = ['<html><FONT color=#0071BC">' num2str(temp{1}) '</Font></html>'];
      data{2,2} = ['<html><FONT color=#D85218">' num2str(temp{2}) '</Font></html>'];
      data{3,2} = ['<html><FONT color=#ECB01F">' num2str(temp{3}) '</Font></html>'];

    实际效果

    1. 再者,一些属性可以直接在属性里设置,分别有:Property 和 Table Property
      属性
      Tip:比如,列的宽度就可以直接在 Table Property Editor 里设置。

    先这么多,后续再补充~~~~

    展开全文
  • [调试后原本应该是显示控件的区域没有任何反应](https://img-ask.csdn.net/upload/202009/22/1600737689_383696.png) ![VS中加载的界面就是这样](https://img-ask.csdn.net/upload/202009/24/1600932629_252685.png...
  • ASP.Net中menu控件使用

    万次阅读 2013-05-22 09:51:17
    这里在详细介绍。...出现一个对话框,也可以点menu控件的箭头如下图: 点击编辑菜单项也会弹出对话框,根据自己爱好可以进行设定,下面是我自己设定的: 当然旁边对应的是每个条目对应的属
  • 单选按钮Option和复选按钮...对于通用属性而言,前面的课程已经介绍过了,再次就进行介绍了,其用法都是一样的,例如Name、Caption等属性都属于所有控件的通用属性,这类通用属性以后的控件都在重复介绍。 Valu
  • 【单选题】下面不属于融雪剂的危害的是()【判断题】当一个存储芯片的存储容量不够用时,可以使用多个存储芯片来扩展容量。【单选题】关于超新星现象,下列说法错误的是( )。【单选题】下列对句中加点字的解释不正确的...
  • 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址 AspNetPager.rar第二步:在项目bin文件夹下引用AspNetPager.dll 如图: 第三步:在工具箱添加AspNetPager控件,如图: 接下来再如图: 这样话...
  • 但是本节教程属于控件用法介绍,暂时涉及数据库内容,所以这里不会讲述如何连接数据库等。 与数据库有关操作可以参看第8章。 从工具箱选中“datagridview”控件,在窗体上拖动出需要大小,这时会自...
  • 查了下,发现是Item布局里面CheckBox控件截取了焦点,只需要把CheckBox中focusable属性设置为false即可android:focusable="false"由于系统自带图标满足了我需求,然后又重新定制了属于自己图标,过程...
  • 直接反编译出来文件下面是直接反编译出来文件修正了一些错误工程下面是我把直接反编译出来文件加入了工程,编译通过Demo-pro下面是演示程序,打开该工程,把EastReport和EastReportDesigner两个工程加入到...
  • 这是因为我们在窗体中添加的控件都有属于自己线程,所以能从其它线程来访问它。 那要如何解决? 使用委托:MethodInvoker,我用这个挺方便下面举一个用例: 1 //调用InitListView(),便可以对...
  • Ajax控件之异步上传图片

    千次阅读 2008-03-28 15:12:00
    有一次在群里聊天,大家都在讨论Ajax能上传图片吗?讨论很激烈。当然是分成两派,有人说不行,有...下面是我用Ajax控件一个上传图书封面部分代码与大家一起分享。希望对大家有用。Image_Save.cs [AjaxPro.Aj
  • 今天与大家分享一下“Asp.Net数据控件引用AspNetPager.dll分页”首先声明以下几点: 1、也许讲解有点初级,希望高手不要“喷”我,因为我知道并是每一个人都是高手,我也怕高手们说我装13,小生不才; 2、如有...
  • 怎样知道C#窗体设计器上用的控件是工具箱中哪个控件 在name、id属性名称已更改情况下。...(如果知道属于哪个类型控件,选“所有Window窗体”就行) 在学习道路上记录一下,希望对您有所帮助。 ...
  • 计算器实现

    2015-05-09 12:17:55
    通过前3节课,我们掌握了最基本几个控件,而就那些东西,我们就足矣去实现一个计算器,下面让我们编出属于自己第一个实用软件——计算器。 布局我就说了,大家也用过计算器,我布局效果是这样。 主...
  • Notification基本上是每个商用APP都会使用一个用户交互控件(其实我也不是很清楚Notification到底是属于控件还是UI还是都包含了),好了,这影响下面继续介绍如何正确使用Notification!!!好了,废话多少...
  • 仿探探卡片实现

    2020-06-30 13:14:46
    RecyclerView 是最佳选择! 第一,RecyclerView 是自带 Item View 回收和重用功能,就需要我们考虑这个问题了; 第二,RecyclerView 布局方式是通过设置 ...RecyclerView属于新增的控件,Android将RecyclerV
  • 又是很长时间没有写博客了,其实是偷懒了,,,最近在网上看见一个很有意思的控件,叫Snackbar,和Toast一样属于轻量级消息通知控件,如图所示 但是,Snackbar要比Toast实用性要高多,而且可以通过重写View...
  • 文件上传文件上传功能话,一般都是需要点击上传按钮,然后打开本地windwos窗口,从窗口中选择文件,然后进行上传,但是windwos弹窗不属于浏览器页面元素,通过WebDriver无法操作windwos控件,那么遇到这种情况...
  • 难道客户端回调只属于.net下面特有,而ajax是无平台区分么?下面是我对.net中回调一些理解,难免有些肤浅,希望大家指正。1.首先要对页面实现ICallbackEventHandler 接口,这主要是让控件可以作为服务器回调事件...
  • ASP.NET网页代码模型及生命周期

    热门讨论 2009-07-28 14:22:11
    在创建了ASP.NET应用程序后,系统同样会默认创建一个Default.aspx页面,不同的是,多出了一个Default.aspx.designer.cs,用来初始化页面控件,一般需要修改。 4.1.5 ASP.NET网站和ASP.NET应用程序的区别 在ASP.NET...
  • 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N...
  • Android近几年面对开发者提供了不少新控件,其中我觉得现在最成功属于RecycleView了;下面我给大家分析为什么我觉得他是最成功。说到RecycleView,不得提出ListView;ListView在使用时候我们都知道,在...
  • 在前面我们把基本控件都搞定了, 其中有一些控件涉及到动画, 但只是不多, 只是简单介绍, 这次我们再来介绍一个有关于动画功能,...图片是在百度找, 版权不属于我, 只做测试只用,如有侵权麻烦请留言, 我会删除处理: 点
  • C#界面伸展缩放--C# WinForm

    千次阅读 2019-06-20 19:03:38
    前言 我属于刚接触C#的萌新,自学了三...因为是初学者,我还搞懂WinForm里面的各个控件的用法,所以怎么让他显示又隐藏,而且界面大小随之变化,我只想到了:设置要操控部分的可视度(visible),改变其大小,然后...
  • WPF中窗口及窗口上的控件属于UI线程,可以再后台代码区直接使用控件属性,却可以可以再新建一个线程中操作控件,因为控件属于UI线程,你新建一个线程去调用UI线程中的控件属于跨线程访问,WPF默认能跨线程...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

下面不属于控件的是