卒業プロジェクトをやっていて、問題が発生しました。長い間検索して、いくつかのドキュメントを読みました。でも駄目。これを達成する方法を手伝うか、いくつかのアイデアを提供してください。インターフェイスに入るときにラベルを使用してローカルIPを取得して表示する機能を実現したいのですが、「get_ip_address」からtextvariableに変数を渡す方法がわかりません。
私の OS は Linux で、python バージョンは 2.7 です。
ここにいくつかのコードがあります:
import fcntl,struct,Tkinter,socket
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(s.fileno(),
0x8915,struct.pack('256s',
ifname[:15])
)[20:24])
top = Tkinter.Tk()
top.geometry('400x300+200+300')
ip_address = Tkinter.StringVar()
ip_address.set(get_ip_address)
icon = top.iconbitmap('@/root/Downloads/python/sdju.xbm')
top.tk.call('wm','iconphoto',top._w,icon)
lable1 = Tkinter.Label(top,textvariable = ip_address)
lable1.pack()
top.mainloop()
以下を試してください。
ip_address.get(get_ip_address)
通常、ゲッター関数を使用しているため、引数を取らず、ここで指定された引数はエラーになります。やりたいことは、値を設定することです。したがって、代わりに を呼び出す必要がありますip_address.set(get_ip_address)
。
次の問題はget_ip_address
、関数への参照を渡すことを呼び出さないことです。したがって、それを呼び出すようにしてください。文字列は、関数自体の文字列表現ではなく、その戻り値に設定されます。IP アドレスが必要なネットワーク インターフェイスの名前を渡す必要があります。
そうip_address.set(get_ip_address)
なりましたip_address.set(get_ip_address('lo'))
。
完全なコード:
import fcntl, struct, Tkinter, socket
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915,struct.pack('256s', ifname[:15]))[20:24])
top = Tkinter.Tk()
top.geometry('400x300+200+300')
ip_address = Tkinter.StringVar()
ip_address.set(get_ip_address('lo'))
icon = Tkinter.PhotoImage(file='/root/Downloads/python/sdju.xbm')
top.tk.call('wm', 'iconphoto', top._w, icon)
lable1 = Tkinter.Label(top, textvariable=ip_address)
lable1.pack()
top.mainloop()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加