2012-10-27 50 views
7

làm cách nào để nhận được giá trị trả về từ A đến C? Tôi không sử dụng lớp học bằng cách này.Giá trị trả về giá trị python tkinter từ hàm được sử dụng trong lệnh

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

Trả lời

3

Bạn có thể gọi C.set từ bên trong button chức năng:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

Câu trả lời ngắn: bạn không thể. Các cuộc gọi lại không thể trả về bất cứ điều gì vì không có nơi nào để trả về - ngoại trừ vòng lặp sự kiện, mà không làm bất cứ điều gì với các giá trị trả lại.

Trong một ứng dụng dựa trên sự kiện, điều bạn thường làm sẽ đặt thuộc tính trên một lớp. Hoặc, nếu bạn là người mới bắt đầu, bạn có thể đặt biến toàn cục. Việc sử dụng biến toàn cục không phải là ý tưởng hay cho mã thực mà phải được duy trì theo thời gian, nhưng không sao cho thử nghiệm.

Vì vậy, ví dụ, vì C dường như là một biến toàn cầu trong ví dụ của bạn, bạn sẽ làm điều gì đó như:

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

nó dễ dàng chỉ cần khai báo một một toàn cầu.

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

Câu hỏi cũ, nhưng hầu hết các câu trả lời đều đề xuất một biến toàn cục. Tôi không thích sử dụng quá nhiều biến toàn cầu trong các dự án của mình, vì vậy đây là giải pháp của tôi.

Khi khai báo nút Tkinter, bạn có thể sử dụng hàm lambda làm lệnh. Lambda này có thể tương tác với các biến nằm trong cùng một không gian tên như nút mà bạn đang định nghĩa. Hãy chắc chắn xác định biến này trước khi khởi tạo nút.

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

Bạn có thể cần phải có self như một cuộc tranh cãi cho button tùy thuộc vào tổ chức dự án của bạn, nhưng khái niệm này là như nhau. Các lệnh lambda cũng hữu ích khi truyền các đối số cho lệnh nút.

Các vấn đề liên quan