2012-01-12 14 views
6

में जानकारी कैसे अपडेट करें मैं पाइथन 3.2.2 चला रहा हूं और सॉकेट का परीक्षण करने के लिए कुछ कोड लिख रहा हूं। परीक्षण की आसानी के लिए, मैं एक जीयूआई इंटरफ़ेस जोड़ने के लिए टिंकर का उपयोग कर रहा हूं। जो मुझे अभी तक पता नहीं है, वह है कि मैं जिस ग्रिड का उपयोग कर रहा हूं उसमें जानकारी को कैसे अपडेट किया जाए।पायथन/टिंकर ग्रिड

import socket 
from tkinter import * 
import tkinter.simpledialog 

root = Tk() 
root.title("Server") 
root.iconbitmap("etc.ico") 
root.geometry("350x100+200+200") 
frame = Frame(root) 
host1 = Label(frame,text="Host: ").grid(row=0,column=0) 
port1 = Label(frame,text="Port: ").grid(row=1,column=0) 
HOST = 'localhost' 
PORT = 11111 
STATUS = 'EMPTY' 
host2 = Label(frame,text=HOST,width=10).grid(row=0,column=1) 
port2 = Label(frame,text=PORT,width=10).grid(row=1,column=1) 
status1 = Label(root,text=STATUS) 
status1.pack(side=RIGHT,padx=2,pady=2) 

def change1(): 
    global HOST 
    HOST= tkinter.simpledialog.askstring(title="Host",prompt="Enter the IP of the Host.") 
    host2.grid_forget() 
def change3(): 
    global PORT 
    PORT= tkinter.simpledialog.askinteger(title="Port",prompt="Enter the Port of the IP.") 
    port2.grid_forget() 
def go1(): 
    global HOST 
    global PORT 
    home = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    home.bind((HOST, PORT)) 
    home.listen(1) 
    conn, addr = home.accept() 
    print (addr) 
    while 1: 
     data = conn.recv(1024) 
     if not data: break 
     global STATUS 
     STATUS = data.decode('UTF-8') 
     conn.send(bytes('Received "Hello World"','UTF-8')) 
    conn.close() 
    global status1 
    status1.pack_forget() 
    status1.pack(side=RIGHT,padx=2,pady=2) 

change = Button(frame, text="Change Host", width=10,command=change1).grid(row=0,column=2) 
change2 = Button(frame, text="Change Port", width=10,command=change3).grid(row=1,column=2) 
go = Button(frame, text="GO!",command=go1,width =10).grid(row=2,column=2) 
frame.pack(side=LEFT) 

mainloop() 

इस मामले पर किसी भी मदद की बहुत सराहना की जाएगी: मैं "host2" और "port2" कार्यों में "change1" और "change3" निम्नलिखित कोड में अद्यतन करने के लिए चाहता हूँ! धन्यवाद!

उत्तर

10

आपका समस्याओं इस लाइन के साथ शुरू:

host1 = Label(frame,text="Host: ").grid(row=0,column=0) 

क्या आप कर रहे हैं एक लेबल पैदा कर रही है, ग्रिड का उपयोग कर स्क्रीन पर लेबल जगह है, तो host1ग्रिड() आदेश का परिणाम बताए , जो खाली स्ट्रिंग है। लेबल के संदर्भ प्राप्त करने के लिए बाद में host1 का उल्लेख करना असंभव हो जाता है।

इसके बजाय, आपको लेबल के संदर्भ को सहेजने की आवश्यकता है। कि संदर्भ के साथ आप बाद में कुछ भी आप लेबल के बारे में चाहते हैं बदल सकते हैं:

host1 = Label(frame, text="Host: ") 
host1.grid(row=0, column=0) 
... 
if (something_has_changed): 
    host1.configure(text="Hello, world!") 

टी के साथ अनुभव के एक दशक से अधिक के साथ किसी से ले लो, यह आपके विजेट निर्माण और लेआउट अलग करने के लिए बेहतर है। आपका लेआउट लगभग निश्चित रूप से विकास के दौरान बदल जाएगा और यह करना बहुत आसान है कि जब आपका सभी लेआउट कोड एक ही स्थान पर होता है। मेरे लेआउट बहुत बदल सकते हैं लेकिन विगेट्स का मेरा कामकाजी सेट शायद ही कभी करता है, इसलिए मैं केवल दूसरे कोड के साथ अलग-अलग व्यक्तिगत लाइनों के बजाय कोड के एक ब्लॉक को बदलना चाहता हूं।

उदाहरण के लिए, मेरे कोड आम तौर पर इस तरह मोटे तौर पर दिखता है:

labell = tk.Label(...) 
label2 = tk.Label(...) 
entry1 = tk.Entry(...) 

label1.grid(...) 
label2.grid(...) 
entry1.grid(...) 
बेशक

, मैं काफी बेहतर चर नाम का उपयोग करें।