亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python實現(xiàn)的二維碼生成小軟件

 更新時間:2014年07月11日 09:00:30   投稿:junjie  
這篇文章主要介紹了Python實現(xiàn)的二維碼生成小軟件,使用wxPython、python-qrcode、pyqrcode、pyqrnative等技術和開源類庫實現(xiàn),需要的朋友可以參考下

前幾天,我估摸著做一個能生成QR Code小程序,并能用wxPython在屏幕上顯示出來。當然,我想用純Python實現(xiàn),觀望了一會后,我找到了三個候選:

github 上的 python-qrcode
sourceforge上的 pyqrcode
Goolge code 上的 pyqrnative

我嘗試了python-qrcode以及pyqrnative,因為它們能夠運行在Windows/Mac/Linux。也不需要依賴額外的其他庫除了Python圖像庫。pyqrcode項目需要其他一些先決條件,并且不能在Windows上運行,所以我不想與之糾纏了。我最后使用了一些以前寫過的一個Photo Viewer程序的代碼,然后稍微地修改了一下,就成了QRCode的查看器了。

開始

正如我上面提到的,你只需要Python圖像庫,GUI部分我們將使用wxPython。python-qrcode相比pyqrnative生成圖片更快,并包含了你見過的大多數(shù)QR碼類型。

生成 QR Codes

當你準備好所有需要的以后,你可以運行以下代碼,看看Python做了些啥:

import os
import wx
 
try:
  import qrcode
except ImportError:
  qrcode = None
 
try:
  import PyQRNative
except ImportError:
  PyQRNative = None
 
########################################################################
class QRPanel(wx.Panel):
  """"""
 
  #----------------------------------------------------------------------
  def __init__(self, parent):
    """Constructor"""
    wx.Panel.__init__(self, parent=parent)
    self.photo_max_size = 240
    sp = wx.StandardPaths.Get()
    self.defaultLocation = sp.GetDocumentsDir()
 
    img = wx.EmptyImage(240,240)
    self.imageCtrl = wx.StaticBitmap(self, wx.ID_ANY,
                     wx.BitmapFromImage(img))
 
    qrDataLbl = wx.StaticText(self, label="Text to turn into QR Code:")
    self.qrDataTxt = wx.TextCtrl(self, value="http://www.mousevspython.com", size=(200,-1))
    instructions = "Name QR image file"
    instructLbl = wx.StaticText(self, label=instructions)
    self.qrPhotoTxt = wx.TextCtrl(self, size=(200,-1))
    browseBtn = wx.Button(self, label='Change Save Location')
    browseBtn.Bind(wx.EVT_BUTTON, self.onBrowse)
    defLbl = "Default save location: " + self.defaultLocation
    self.defaultLocationLbl = wx.StaticText(self, label=defLbl)
 
    qrcodeBtn = wx.Button(self, label="Create QR with qrcode")
    qrcodeBtn.Bind(wx.EVT_BUTTON, self.onUseQrcode)
    pyQRNativeBtn = wx.Button(self, label="Create QR with PyQRNative")
    pyQRNativeBtn.Bind(wx.EVT_BUTTON, self.onUsePyQR)
 
    # Create sizer
    self.mainSizer = wx.BoxSizer(wx.VERTICAL)
    qrDataSizer = wx.BoxSizer(wx.HORIZONTAL)
    locationSizer = wx.BoxSizer(wx.HORIZONTAL)
    qrBtnSizer = wx.BoxSizer(wx.VERTICAL)
 
    qrDataSizer.Add(qrDataLbl, 0, wx.ALL, 5)
    qrDataSizer.Add(self.qrDataTxt, 1, wx.ALL|wx.EXPAND, 5)
    self.mainSizer.Add(wx.StaticLine(self, wx.ID_ANY),
              0, wx.ALL|wx.EXPAND, 5)
    self.mainSizer.Add(qrDataSizer, 0, wx.EXPAND)
    self.mainSizer.Add(self.imageCtrl, 0, wx.ALL, 5)
    locationSizer.Add(instructLbl, 0, wx.ALL, 5)
    locationSizer.Add(self.qrPhotoTxt, 0, wx.ALL, 5)
    locationSizer.Add(browseBtn, 0, wx.ALL, 5)
    self.mainSizer.Add(locationSizer, 0, wx.ALL, 5)
    self.mainSizer.Add(self.defaultLocationLbl, 0, wx.ALL, 5)
 
    qrBtnSizer.Add(qrcodeBtn, 0, wx.ALL, 5)
    qrBtnSizer.Add(pyQRNativeBtn, 0, wx.ALL, 5)
    self.mainSizer.Add(qrBtnSizer, 0, wx.ALL|wx.CENTER, 10)
 
    self.SetSizer(self.mainSizer)
    self.Layout()
 
  #----------------------------------------------------------------------
  def onBrowse(self, event):
    """"""
    dlg = wx.DirDialog(self, "Choose a directory:",
              style=wx.DD_DEFAULT_STYLE)
    if dlg.ShowModal() == wx.ID_OK:
      path = dlg.GetPath()
      self.defaultLocation = path
      self.defaultLocationLbl.SetLabel("Save location: %s" % path)
    dlg.Destroy()
 
  #----------------------------------------------------------------------
  def onUseQrcode(self, event):
    """
    https://github.com/lincolnloop/python-qrcode
    """
    qr = qrcode.QRCode(version=1, box_size=10, border=4)
    qr.add_data(self.qrDataTxt.GetValue())
    qr.make(fit=True)
    x = qr.make_image()
 
    qr_file = os.path.join(self.defaultLocation, self.qrPhotoTxt.GetValue() + ".jpg")
    img_file = open(qr_file, 'wb')
    x.save(img_file, 'JPEG')
    img_file.close()
    self.showQRCode(qr_file)
 
  #----------------------------------------------------------------------
  def onUsePyQR(self, event):
    """

http://code.google.com/p/pyqrnative/

    """
    qr = PyQRNative.QRCode(20, PyQRNative.QRErrorCorrectLevel.L)
    qr.addData(self.qrDataTxt.GetValue())
    qr.make()
    im = qr.makeImage()
 
    qr_file = os.path.join(self.defaultLocation, self.qrPhotoTxt.GetValue() + ".jpg")
    img_file = open(qr_file, 'wb')
    im.save(img_file, 'JPEG')
    img_file.close()
    self.showQRCode(qr_file)
 
  #----------------------------------------------------------------------
  def showQRCode(self, filepath):
    """"""
    img = wx.Image(filepath, wx.BITMAP_TYPE_ANY)
    # scale the image, preserving the aspect ratio
    W = img.GetWidth()
    H = img.GetHeight()
    if W > H:
      NewW = self.photo_max_size
      NewH = self.photo_max_size * H / W
    else:
      NewH = self.photo_max_size
      NewW = self.photo_max_size * W / H
    img = img.Scale(NewW,NewH)
 
    self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))
    self.Refresh()
 
 
########################################################################
class QRFrame(wx.Frame):
  """"""
 
  #----------------------------------------------------------------------
  def __init__(self):
    """Constructor"""
    wx.Frame.__init__(self, None, title="QR Code Viewer", size=(550,500))
    panel = QRPanel(self)
 
if __name__ == "__main__":
  app = wx.App(False)
  frame = QRFrame()
  frame.Show()
  app.MainLoop()

python-qrcode生成效果圖:

PyQRNative生成效果圖:

相關文章

  • Python實現(xiàn)創(chuàng)建模塊的方法詳解

    Python實現(xiàn)創(chuàng)建模塊的方法詳解

    導入一個模塊,我們一般都會使用?import?關鍵字,但有些場景下?import?難以滿足我們的需要。所以除了?import?之外還有很多其它導入模塊的方式,下面就來介紹一下
    2022-07-07
  • python列表刪除元素的三種實現(xiàn)方法

    python列表刪除元素的三種實現(xiàn)方法

    本文主要介紹了python列表刪除元素的三種實現(xiàn)方法,主要包括pop方法,remove方法,del方法這三種,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • python使用datetime模塊處理日期時間及常用功能詳解

    python使用datetime模塊處理日期時間及常用功能詳解

    datetime模塊是Python標準庫中用于處理日期和時間的模塊,在本節(jié)中,我們將介紹datetime模塊的一些常用功能,并通過實例代碼詳細講解每個知識點,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-06-06
  • Python socket實現(xiàn)簡單聊天室

    Python socket實現(xiàn)簡單聊天室

    這篇文章主要為大家詳細介紹了Python socket實現(xiàn)簡單聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 如何使用python-dotenv解決代碼與敏感信息的分離

    如何使用python-dotenv解決代碼與敏感信息的分離

    我們開發(fā)的每個系統(tǒng)都離不開配置信息,這些信息都非常敏感,一旦泄露出去后果非常嚴重,被泄露的原因一般是程序員將配置信息和代碼混在一起導致的,這篇文章主要給大家介紹了關于如何使用python-dotenv解決代碼與敏感信息的分離,需要的朋友可以參考下
    2022-03-03
  • Python簡單實現(xiàn)區(qū)域生長方式

    Python簡單實現(xiàn)區(qū)域生長方式

    今天小編就為大家分享一篇Python簡單實現(xiàn)區(qū)域生長方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 獲取django框架orm query執(zhí)行的sql語句實現(xiàn)方法分析

    獲取django框架orm query執(zhí)行的sql語句實現(xiàn)方法分析

    這篇文章主要介紹了獲取django框架orm query執(zhí)行的sql語句實現(xiàn)方法,結合實例形式分析了Django框架中orm query執(zhí)行的sql語句獲取方法相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • python下如何查詢CS反恐精英的服務器信息

    python下如何查詢CS反恐精英的服務器信息

    這篇文章主要介紹了python下如何查詢CS反恐精英服務器信息的方法,分別分享了反恐精英1.5版本和反恐精英1.6版本的實現(xiàn)方法示例,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。
    2017-01-01
  • 使用Python的Flask框架構建大型Web應用程序的結構示例

    使用Python的Flask框架構建大型Web應用程序的結構示例

    雖說Flask是一個以輕量級著稱的框架,但也為大型Web應用提供了諸如單元測試與數(shù)據(jù)庫遷移等許多便利的功能,這里我們來看一下使用Python的Flask框架構建大型Web應用程序的結構示例:
    2016-06-06
  • 簡單分析Python中用fork()函數(shù)生成的子進程

    簡單分析Python中用fork()函數(shù)生成的子進程

    這篇文章主要介紹了Python中用fork()函數(shù)生成的子進程,分析子進程與父進程的執(zhí)行順序,需要的朋友可以參考下
    2015-05-05

最新評論