<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實現一個簡單的html網頁預覽器

          共 7899字,需瀏覽 16分鐘

           ·

          2021-12-20 04:05

          本次分享實現一個簡單的頁面圖片加載功能。本次代碼結構由兩個文件組成,主頁面設置控制鍵和功能函數,通過頁面鼠標點擊事件響應調用open_html.py文件,新建窗體顯示html網頁圖片。


          01
          html網頁窗體加載



          #第一部分:主函數html_view.py文件,網頁查看主頁,點擊標簽lable響應循環(huán)切換加載html網頁from PyQt5.Qt import *
          import osfrom PyQt5.QtCore import QUrlfrom 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(400, 200)
          # 關鍵1、對要過濾的控件設置installEventFilter,這些控件的所有事件都會被eventFilter函數接受并處理。 self.label1.installEventFilter(self) self.label2.installEventFilter(self)
          #設置網格布局 mainLayout=QGridLayout(self) mainLayout.addWidget(self.label1,500,0)
          mainLayout.addWidget(self.label2, 500, 2) mainLayout.addWidget(self.LabelState, 600, 1) 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.5, 0.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、創(chuàng)建一個應用程序對象 app = QApplication(sys.argv)
          # 2、控件的操作 # 創(chuàng)建控件 window = EventFilter()
          # 展示控件 window.show()
          # 3、應用程序的執(zhí)行,進入到消息循環(huán) sys.exit(app.exec_())


          #第二部分:調用open_html.py文件,新建窗體顯示htmlimport osfrom PyQt5.QtCore import QUrlfrom PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtWebEngineWidgets import QWebEngineViewimport 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_())


          02
          圖片查看器(代碼參考網絡)



          import osimport tkinterimport tkinter.messagebox
          from PIL import Image, ImageTk
          # 創(chuàng)建tkinter應用程序窗口root = tkinter.Tk()# 設置窗口的大小和位置root.geometry('430x650+40+30')# 不允許改變窗口的大小root.resizable(False, False)# 設置窗口主題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]
          # 創(chuàng)建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))
          # 創(chuàng)建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((32, 32)) 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()


          往期推薦


          1、沒有這個傳奇工程師,就沒有今天的Windows

          2、XShell 收費?5款免費且超贊的SSH工具,一個比一個香!

          3、核彈級漏洞!我把log4j扒給你看!

          4、Log4j2維護者吐槽沒工資還要挨罵,GO安全負責人建議開源作者向公司收費

          5、欠債3000億,宣布破產!昔日民族品牌,為何總淪為反面教材?


          點擊關注公眾號,閱讀更多精彩內容


          瀏覽 89
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱亚洲色图 | 黃色一级A一片人与 | 久久久久久久三级片AV | 人碰人人操人 | 99re在线视频免费播放 |