精华内容
下载资源
问答
  • 本次代码结构由两文件组成,主页面设置控制键和功能函数,通过页面鼠标点击事件响应调用open_html.py文件,新建窗体显示html网页图片。html网页窗体加载#第一部分:主函数html_view.py文件,网页查看主页,点击...

    本次分享实现一个简单的页面图片加载功能,展示所用精美图片用pyecharts绘制,更多美图可关注公众号Python与算法社区获取源代码。本次代码结构由两个文件组成,主页面设置控制键和功能函数,通过页面鼠标点击事件响应调用open_html.py文件,新建窗体显示html网页图片。

    html网页窗体加载

    #第一部分:主函数html_view.py文件,网页查看主页,点击标签lable响应循环切换加载html网页
    from PyQt5.Qt import *

    import os
    from PyQt5.QtCore import QUrl
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtWebEngineWidgets import QWebEngineView


    class EventFilter(QWidget):
        def __init__(self,parent=None):
            super(EventFilter, self).__init__(parent)

            self.file_name = self.setup_dir_fullname()
            self.index = 0

            self.setWindowTitle("html_view")

            # 设置窗口图标
            self.setWindowIcon(QIcon('icons/two.ico'))

            self.label1 = QLabel("prev")

            self.label2 = QLabel("next")

            self.LabelState=QLabel("测试提示")

            self.image1 = QImage("G:/Projectfile/icons/back.png")

            self.image2 = QImage("G:/Projectfile/icons/next.png")


            self.resize(400200)

            # 关键1、对要过滤的控件设置installEventFilter,这些控件的所有事件都会被eventFilter函数接受并处理。
            self.label1.installEventFilter(self)
            self.label2.installEventFilter(self)

            #设置网格布局
            mainLayout=QGridLayout(self)
            mainLayout.addWidget(self.label1,500,0)

            mainLayout.addWidget(self.label2, 5002)
            mainLayout.addWidget(self.LabelState, 6001)
            self.setLayout(mainLayout)
            print(self.file_name)

        # 关键2、在eventFiltr函数中处理这些控件的事件信息。
        def eventFilter(self, watched,event):

            if watched == self.label1:  #只对label1的点击事件进行过滤,重写行为,其他事件忽略

                #鼠标按下事件(这里仅设置鼠标左键响应)
                if event.type() ==QEvent.MouseButtonPress:
                    mouseEvent = QMouseEvent(event)
                    if mouseEvent.buttons() == Qt.LeftButton:
                        self.open(self.prev())
                        self.LabelState.setText(self.prev())
                    #缩放图片
                    transform=QTransform()
                    transform.scale(0.5,0.5)
                    tmp=self.image1.transformed(transform)
                    tmp2 = self.image2.transformed(transform)
                    self.label1.setPixmap(QPixmap.fromImage(tmp))
                    self.label2.setPixmap(QPixmap.fromImage(tmp2))
                # 鼠标释放事件
                if event.type() == QEvent.MouseButtonRelease:

                    self.label1.setPixmap(QPixmap.fromImage(self.image1))

            if watched == self.label2:  # 只对label2的点击事件进行过滤,重写行为,其他事件忽略

                if event.type() == QEvent.MouseButtonPress:
                    mouseEvent = QMouseEvent(event)
                    if mouseEvent.buttons() == Qt.LeftButton:
                        self.open(self.next())
                        self.LabelState.setText(self.next())

                    # 转换图片大小
                    transform = QTransform()
                    transform.scale(0.50.5)
                    tmp2 = self.image2.transformed(transform)
                    self.label2.setPixmap(QPixmap.fromImage(tmp2))

                # 鼠标释放事件
                if event.type() == QEvent.MouseButtonRelease:

                    self.label2.setPixmap(QPixmap.fromImage(self.image2))

            return QWidget.eventFilter(self,watched,event)


        def open(self,file_name1):  # 显示窗体2
            import open_html
            self.second = open_html.myWindow(file_name1)

            self.second.show()

        def setup_dir_fullname(self):
            # 初始化设置存储HTML文件的文件夹名称,默认“pic_html”,这里存放需要预览的html文件。
            pyechart_dir = 'pic_html'
            if not os.path.isdir(pyechart_dir):
                os.mkdir(pyechart_dir)
            self.path_dir_pyechart_html = os.getcwd() + os.sep + pyechart_dir

            self.mylist = os.listdir(self.path_dir_pyechart_html)

            return self.mylist

            ###等效代码###
            # self.mylist = []
            # for dirpath, dirnames, filenames in os.walk(self.path_dir_pyechart_html):
            #     for filepath in filenames:
            #         self.mylist.append(os.path.join(filepath))

        def prev(self):
            return self.show_file(-1)

        def next(self):
            return self.show_file(1)

        def show_file(self, n):
            self.index += n
            if self.index 0:
                self.index = (len(self.file_name) - 1)
            if self.index > (len(self.file_name) - 1):
                self.index = 0

            self.file_name1 = self.file_name[self.index]
            return self.file_name1


    if __name__ == '__main__':
        import sys
        # 1、创建一个应用程序对象
        app = QApplication(sys.argv)

        # 2、控件的操作
        # 创建控件
        window = EventFilter()

        # 展示控件
        window.show()

        # 3、应用程序的执行,进入到消息循环
        sys.exit(app.exec_())



    #第二部分:调用open_html.py文件,新建窗体显示html
    import os
    from PyQt5.QtCore import QUrl
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtWebEngineWidgets import QWebEngineView
    import sys

    class myWindow(QWidget):

        def __init__(self,file_name):

            super().__init__()
            self.file_name=file_name

            self.setWindowTitle("play")

            # 设置窗口图标
            self.setWindowIcon(QIcon('icons/pic.ico'))

            self.resize(950,580)

            self.mainLayout(self.file_name)


        def mainLayout(self,file_name):

            pyechart_dir = 'pic_html'
            if not os.path.isdir(pyechart_dir):
                os.mkdir(pyechart_dir)
            self.path_dir_pyechart_html = os.getcwd() + os.sep + pyechart_dir

            path_pyechart = self.path_dir_pyechart_html + os.sep +file_name

            self.mainhboxLayout = QHBoxLayout(self)
            self.frame = QFrame(self)
            self.mainhboxLayout.addWidget(self.frame)
            self.hboxLayout = QHBoxLayout(self.frame)

            # 网页嵌入PyQt5
            self.myHtml = QWebEngineView()  ##浏览器引擎控件
            self.myHtml.setGeometry(50,20,1000,600)

            # 打开本地html文件#使用绝对地址定位,在地址前面加上 file:/// ,将地址的 \ 改为/
            self.myHtml.load(QUrl.fromLocalFile("file:/{0}".format(path_pyechart)))

            self.hboxLayout.addWidget(self.myHtml)
            self.setLayout(self.mainhboxLayout)

    #测试
    # if __name__ == '__main__':
    #     app = QApplication(sys.argv)
    #
    #     main = myWindow(file_name)
    #
    #     main.show()
    #     # main.showMaximized()
    #     sys.exit(app.exec_())

    8a6eaecdc5d44595cb20368c55b8576b.gif

    图片查看器(代码参考网络)

    import os
    import tkinter
    import tkinter.messagebox

    from PIL import Image, ImageTk

    # 创建tkinter应用程序窗口
    root = tkinter.Tk()
    # 设置窗口的大小和位置
    root.geometry('430x650+40+30')
    # 不允许改变窗口的大小
    root.resizable(FalseFalse)
    # 设置窗口主题
    root.title('PIC-view')
    root.iconbitmap(r'.\Projectfile\test\two.ico')
    # 获取当前文件夹中所有图片文件列表
    suffix = ('.jpg''.bmp''.png')
    pics = [p for p in os.listdir('./Projectfile/test'if p.endswith(suffix)]
    pics.sort(key=lambda item: int(item[:item.index('.')]))

    current = 0

    def changePic(flag):
        global current
        new = current + flag

        if new 0:
            tkinter.messagebox.showerror('''这已经是第一张图片了')
        elif new >= len(pics):
            tkinter.messagebox.showerror('''这已经是最后一张图片了')
        else:
            # 获取要切换图片文件名
            pic = pics[new]

            # 创建Image对象并进行缩放
            im = Image.open('./Projectfile/test/{}'.format(pic))
            w, h = im.size

            # 这里假设用来显示图片的Label组件尺寸为 400x600
            if w > 400:
                h = int(h * 400 / w)
                w = 400
            if h > 600:
                w = int(w * 600 / h)
                h = 600

            im = im.resize((w, h))

            # 创建image对象,并设置Label组件图片
            im1 = ImageTk.PhotoImage(im)
            lbPic['image'] = im1
            lbPic.image = im1

            current = new
    # 上一张的按钮
    def btnPreClick():
        changePic(-1)

    # 下一张按钮
    def btnNextClick():
        changePic(1)

    def get_ico(path):
        ico_img = Image.open(path).resize((3232))
        icoBtn = ImageTk.PhotoImage(image=ico_img)
        return icoBtn

    pr = get_ico(r'.\Projectfile\icons\back.png')
    nt = get_ico(r'.\Projectfile\icons\next.png')

    btnPre = tkinter.Button(root, image=pr, command=btnPreClick)
    btnPre.place(x=100, y=20, width=80, height=30)

    btnNext = tkinter.Button(root, image=nt, command=btnNextClick)
    btnNext.place(x=230, y=20, width=80, height=30)

    # 用来显示图片的Label组件
    lbPic = tkinter.Label(root, text='test', width=400, height=600)
    changePic(0)
    lbPic.place(x=10, y=50, width=400, height=600)

    # 启动
    root.mainloop()

    0fa05d5b5c7772d83c8bc0eb1bf8ae82.gif

    展开全文
  • Excel_VBA教程

    2014-09-22 11:36:34
    10.在CASE子句里确定多个表达式 123 11.接下来… 123 第六章 在VBA中重复操作 123 1.DO LOOPS: DO…WHILE和DO…UNTIL 123 2.观察过程执行 126 3.WHILE…WEND循环 127 4.FOR…NEXT 循环 128 5.FOR EACH…NEXT循环 129...
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧106 多个文本框数据相加 12 技巧107 控件跟随活动单元格 12 技巧108 高亮显示按钮 12 技巧109 组合框和列表框添加列表项的方法 12 109-1 使用RowSource属性添加列表项 12 109-2 使用List属性添加列表项 12 109-3...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧106 多个文本框数据相加 243 技巧107 控件跟随活动单元格 244 技巧108 高亮显示按钮 245 技巧109 组合框和列表框添加列表项的方法 247 109-1 使用RowSource属性添加列表项 247 109-2 使用List属性添加列表项 248...
  • 中文版Excel.2007高级VBA编程宝典 1/2

    热门讨论 2012-04-06 16:00:16
    本书将介绍如何定制Excel 用户窗体、开发新实用程序、用VBA 处理图表及数据透视表,以及创建事件处理应用程序。还将介绍如何使用VBA 子过程和函数过程、与其他应用程序轻松交互、构建用户友好的工具栏、菜单和帮助...
  • 04052引用多个非连续单元格区域的集合(Union方法) 04053引用多个非连续单元格区域的集合(循环处理) 04054引用多个单元格区域的交叉区域 04055获取计算公式的所有引用单元格 04056获取计算公式中引用的其他工作表...
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    三.Property属性过程和Event事件过程.........................................5 第十二节内部函数............................................................................................................
  • Excel学习小记

    2015-11-26 18:29:03
    下班啦,不过外面高峰,还是躲一下再走吧。 最近囫囵吞枣式地过完了...简言之,它比入门出来的内容主要是对vba事件(比如MouseUp,MouseDown),windows系统对象的调用(比如放音乐,扒网页)和窗体与控件的摆弄

    下班啦,不过外面高峰,还是躲一下再走吧。

    最近囫囵吞枣式地过完了《VBA编程与实践》想说这本书就不及《VBA入门与提高》来的好。技术上是深了点,但是程序写的可读性都好差,变量用中文真的是个大忌。因为注释也写中文,穿插其中不适合人脑识别。

    简言之,它比入门多出来的内容主要是对vba事件(比如MouseUp,MouseDown),windows系统对象的调用(比如放个音乐,扒个网页)和窗体与控件的摆弄(比如做做日历,玩玩彩蛋)。另外,DLL封装这部分,有点过时了。现在电脑都64位了,但是这本书还在vc6.0。当然具体到例子里,程序的漂亮思路还是有些的。


    接下来填鸭学习这块何去何从呢?还没想好。那就休息,休息一会儿。喵喵喵~~~

    展开全文
  • 4.4 通过编程实现同一窗体多个副本 83 4.4.1 支持多窗体实例 84 4.4.2 检查Employees窗体的代码 84 4.4.3 自动关闭Employees窗体 86 4.5 小 结 87 第5章 使用DAO 88 5.1 理解DAO 88 5.1.1 了解...
  • 27612.3.6 改变对象的颜色 27712.4 选择、编辑、移动窗体元素和控件 28112.4.1 改变窗体页眉和窗体页脚的大小 28212.4.2 选择、移动和缩放单个控件 28212.4.3 将控件和网格对齐 28312.4.4 选择和移动多个控件 28312....
  • 27612.3.6 改变对象的颜色 27712.4 选择、编辑、移动窗体元素和控件 28112.4.1 改变窗体页眉和窗体页脚的大小 28212.4.2 选择、移动和缩放单个控件 28212.4.3 将控件和网格对齐 28312.4.4 选择和移动多个控件 28312....
  • 27612.3.6 改变对象的颜色 27712.4 选择、编辑、移动窗体元素和控件 28112.4.1 改变窗体页眉和窗体页脚的大小 28212.4.2 选择、移动和缩放单个控件 28212.4.3 将控件和网格对齐 28312.4.4 选择和移动多个控件 28312....
  • 27612.3.6 改变对象的颜色 27712.4 选择、编辑、移动窗体元素和控件 28112.4.1 改变窗体页眉和窗体页脚的大小 28212.4.2 选择、移动和缩放单个控件 28212.4.3 将控件和网格对齐 28312.4.4 选择和移动多个控件 28312....
  • 2.10.3 处理多个事件 111 2.10.4 withevents关键字 111 2.10.5 触发事件 111 2.10.6 声明和触发定制事件 112 2.10.7 用withevents关键字接收事件 113 2.10.8 用addhandler接收事件 115 2.10.9 构造函数...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    VBA窗体帮助信息查询】:窗体相关的VBA帮助查询,包括事件、方法、属性、对象、集合与控件 【函数运算符符语法查询】:VBA函数以及运算符相关的帮助查询 【反向选择】:选择当前区域中未选择的区域 【千年日历】:工...
  • 2.10.3 处理多个事件 111 2.10.4 withevents关键字 111 2.10.5 触发事件 111 2.10.6 声明和触发定制事件 112 2.10.7 用withevents关键字接收事件 113 2.10.8 用addhandler接收事件 115 2.10.9 ...
  • Excel百宝箱

    2012-10-27 17:09:21
    VBA窗体帮助信息查询】:窗体相关的VBA帮助查询,包括事件、方法、属性、对象、集合与控件 【函数运算符符语法查询】:VBA函数以及运算符相关的帮助查询 【反向选择】:选择当前区域中未选择的区域 【千年日历】:工...
  • VBA窗体帮助信息查询】:窗体相关的VBA帮助查询,包括事件、方法、属性、对象、集合与控件 【函数运算符符语法查询】:VBA函数以及运算符相关的帮助查询 【反向选择】:选择当前区域中未选择的区域 【千年日历】:...
  • VBSCRIP5 -ASP用法详解

    2010-09-23 17:15:46
    ExecuteGlobal 语句 执行一个或多个在全局脚本名字空间中所指定的语句。 Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。 Exp 函数 返回 e (自然对数的底)的多少次方。 自乘运算符 (^) 指数...
  • VBSCRIPT中文手册

    热门讨论 2010-11-12 10:13:06
    当这主题打开后,再链接到其他相关的部分就简单了。 好了,让我们试一试,体会体会!学习几语句,研究几种方法,或者熟悉几函数。你就能学会如何巧妙地运用 VBScript 语言,充分发挥 VBScript 语言的强大...
  • vb Script参考文档

    2009-07-28 22:13:02
    当这主题打开后,再链接到其他相关的部分就简单了。 好了,让我们试一试,体会体会!学习几语句,研究几种方法,或者熟悉几函数。你就能学会如何巧妙地运用 VBScript 语言,充分发挥 VBScript 语言的强大...
  • 2.9.1 多个Main()方法 2.9.2 给Main()方法传送参数 2.10 有关编译C#文件的更多内容 2.11 控制台I/O 2.12 使用注释 2.12.1 源文件中的内部注释 2.12.2 XML文档说明 2.13 C#预处理器指令 2.13.1 #define和 #undef ...
  • C#高级编程(第6版)

    2011-05-11 11:10:30
     2.9.1 多个Main()方法  2.9.2 给Main()方法传送参数  2.10 有关编译C#文件的更多内容  2.11 控制台I/O  2.12 使用注释  2.12.1 源文件中的内部注释  2.12.2 XML文档说明  2.13 C#预处理器指令  2.13.1 #...
  •  2.9.1 多个Main()方法  2.9.2 给Main()方法传送参数  2.10 有关编译C#文件的更多内容  2.11 控制台I/O  2.12 使用注释  2.12.1 源文件中的内部注释  2.12.2 XML文档说明  2.13 C#预处理器指令  2.13.1 #...
  • 2.9.1 多个Main()方法 2.9.2 给Main()方法传送参数 2.10 有关编译C#文件的更多内容 2.11 控制台I/O 2.12 使用注释 2.12.1 源文件中的内部注释 2.12.2 XML文档说明 2.13 C#预处理器指令 2.13.1 #define和 #undef ...
  • 3 共亨方法、变量和事件………74 2 . 4 . 4 运算符垔载...............................79 2.4.5 委托............................................81 2 . 4 . 6 类和组件...................................85 ...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

vba事件调用多个窗体