2016-03-02 177 views
0

我對編碼相當陌生,大多數時候我在研究如何編寫事物。我很難試圖讓這個標籤更新,我認爲這是因爲我試圖改變StringVar()在我不能的地方。Python Tkinter StringVar()問題

無論如何,以下是我的代碼,對不起,如果它是醜陋的。我將不勝感激任何建議,但最重要的是,當我更改StringVar()變量時,需要更新Label(connection_window, textvariable=isconnected).grid(row=3)

import socket 
import sys 
from Tkinter import * 

root = Tk() 


ip_entry = None 
port_entry = None 
isconnected = StringVar() 

try: 
    mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
except socket.error: 
    print ("failed to create socket") 
    sys.exit() 

def start_connection_window(): 
    connection_window = Toplevel(root) 
    global ip_entry 
    global port_entry 
    global isconnected 

    Label(connection_window, text = "Host IP Address:").grid(row=0) 
    Label(connection_window, text = "Host Port #:").grid(row=1) 

    ip_entry = Entry(connection_window) 
    port_entry = Entry(connection_window) 
    connect_button = Button(connection_window, text="connect", width=15, command=connect) 

    ip_entry.grid(row=0, column=1) 
    port_entry.grid(row=1, column=1) 
    connect_button.grid(row=2, column=0, columnspan=2) 
    Label(connection_window, textvariable=isconnected).grid(row=3) 

def connect(): 
    global ip_address 
    global port_number 
    global isconnected 
    isconnected = "worked" 
    ip_address = ip_entry.get() 
    port_number = port_entry.get() 
    try: 
     mysock.connect((ip_address,port_number)) 
     print("connected to",ip_address,port_number) 
    except: 
     isconnected.set("unable to connect") 

open_connection = Button(root, text="Connection setup", width=15, height=3, command=start_connection_window) 

Label(root, text = "Jason's Watering System", width=100).grid(row=0,column=0,columnspan=2) 
open_connection.grid(row=0, column=2) 

""" 
mysock.sendall(message) 
""" 

mysock.close() 
root.mainloop() 
+2

你不只是修改'isconnected';你將它拋出並將引用綁定到一個完全不同的對象,它實際上是一個字符串(''''')而不是一個'StringVar()'對象(所以'isconnected.set()'應該導致一個錯誤)。除此之外,你可能想看看[追蹤](http://stackoverflow.com/questions/6548837/how-do-i-get-an-event-callback-when-a-tkinter-entry-widget-is -改性)。 – TigerhawkT3

回答

1

首先,通過鍵入isconnected = "worked",你再結合isconnected比其他東西StringVar你它在頂部設置。這將是一個問題。你的意思可能是isconnected.set("worked")之類的東西。

其次,像

mylabel = Label(connection_window, textvariable=isconnected) 
mylabel.grid(row=3) 
isconnected.trace("w", mylabel.update) # w = "changed" 

將使它所以每當STRINGVAR改變時,標籤被更新。

+1

我想你應該在你的回答中解決這個問題,Tigerhawk在評論中這樣說。 'isconnected =「working」'這一行破壞了stringvar並使其成爲一個字符串。 – Lafexlos

+0

你不需要痕跡。 「StringVar」的主要特點就是與其關聯的所有小部件都會自動更新。 –