Dieser Code verwendet die Module wxPython, socket, qrcode und PIL (Python Imaging Library), um eine Fensteranwendung mit einer lokalen IP-Adresse und entsprechendem QR-Code zu generieren.
C:\pythoncode\new\showipgenqrcode.py
Lassen Sie uns Zeile für Zeile erklären, was der Code bewirkt:
import wx
: Importieren Sie das wxPython-Modul, das zum Erstellen von Fenstern und Steuerelementen für GUI-Anwendungen verwendet wird.import socket
: Importieren Sie das Socket-Modul, um die lokale IP-Adresse zu erhalten.import qrcode
: Importieren Sie das qrcode-Modul zum Generieren von QR-Codes.from PIL import Image
: Importieren Sie die Bildklasse aus dem PIL-Modul (Python Imaging Library), die zum Konvertieren von QR-Code in eine Bilddatei verwendet wird.
MyFrame
Als Nächstes müssen Sie eine von der wxPython-Klasse geerbte Klasse definieren wx.Frame
, die zum Erstellen von Fensteranwendungen verwendet wird. In __init__
der Methode:
super().__init__(None, title="IP Address and QR Code", size=(400, 300))
: Rufen Sie den Konstruktor der übergeordneten Klasse auf, erstellen Sie ein Fenster und legen Sie Titel und Größe fest.panel = wx.Panel(self)
: Erstellen Sie ein Panel zum Platzieren anderer Steuerelemente.ip_address = socket.gethostbyname(socket.gethostname())
: Verwenden Sie das Socket-Modul, um die lokale IP-Adresse abzurufen.qr = qrcode.QRCode(version=1, box_size=10, border=4)
: Erstellen Sie ein QRCode-Objekt, geben Sie die Version, die Quadratgröße und die Rahmenbreite an.qr.add_data(ip_address)
: Fügen Sie die lokale IP-Adresse zum QRCode-Objekt hinzu.qr.make(fit=True)
: Erzeugt ein QR-Code-Bild.qr_image = qr.make_image(fill_color="black", back_color="white")
: Bild entsprechend dem QRCode-Objekt generieren, Vordergrund- und Hintergrundfarbe festlegen.temp_file = "temp_qrcode.png"
: Gibt den Namen der temporären Datei an.qr_image.save(temp_file)
: Speichern Sie das QR-Code-Bild als temporäre Datei.qr_bitmap = wx.Bitmap(temp_file, type=wx.BITMAP_TYPE_PNG)
: Erstellen Sie ein Bitmap-Objekt mithilfe einer temporären Datei.ip_label = wx.StaticText(panel, label=f"IP Address: {ip_address}")
: Erstellen Sie ein statisches Textsteuerelement, das die IP-Adresse anzeigt.qr_bitmap_ctrl = wx.StaticBitmap(panel, bitmap=qr_bitmap)
: Erstellt ein statisches Bitmap-Steuerelement, das ein QR-Codebild anzeigt.sizer = wx.BoxSizer(wx.VERTICAL)
: Erstellt einen vertikalen Layout-Manager.sizer.Add(ip_label, 0, wx.ALL, 10)
: Fügt dem Layout ein IP-Adress-Textsteuerelement hinzu und legt die Ränder fest.sizer.Add(qr_bitmap_ctrl, 0, wx.ALL, 10)
: Fügen Sie das QR-Code-Bitmap-Steuerelement zum Layout hinzu und legen Sie den Rand fest.panel.SetSizerAndFit(sizer)
: Wendet einen Layout-Manager auf das Panel an.
alle Codes
import wx
import socket
import qrcode
from PIL import Image
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title="IP Address and QR Code", size=(400, 300))
panel = wx.Panel(self)
# 获取本地 IP 地址
ip_address = socket.gethostbyname(socket.gethostname())
# 生成 QR 码
qr = qrcode.QRCode(version=1, box_size=10, border=4)
qr.add_data(ip_address)
qr.make(fit=True)
# 将 QR 码转换为图片
qr_image = qr.make_image(fill_color="black", back_color="white")
# 将图片保存为临时文件
temp_file = "temp_qrcode.png"
qr_image.save(temp_file)
# 创建位图对象
qr_bitmap = wx.Bitmap(temp_file, type=wx.BITMAP_TYPE_PNG)
# 在面板上显示 IP 地址和 QR 码
ip_label = wx.StaticText(panel, label=f"IP Address: {
ip_address}")
qr_bitmap_ctrl = wx.StaticBitmap(panel, bitmap=qr_bitmap)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(ip_label, 0, wx.ALL, 10)
sizer.Add(qr_bitmap_ctrl, 0, wx.ALL, 10)
panel.SetSizerAndFit(sizer)
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
Schließlich erstellen wir if __name__ == '__main__':
eine Instanz der wxPython-Anwendung im Block und führen die Hauptschleife der Anwendung aus ( app.MainLoop()
). Dadurch wird die Fensteranwendung angezeigt und auf Benutzerinteraktion gewartet.
Im Anwendungsfenster werden die lokale IP-Adresse und der entsprechende QR-Code angezeigt, sodass Benutzer Netzwerkinformationen teilen und darauf zugreifen können.