2012-12-19 30 views
12

Tôi đã viết một chương trình bằng Python với giao diện người dùng đồ họa tkinter. Khi điều này được chạy từ tập lệnh, không có vấn đề gì.Không thể đặt giá trị với tập lệnh tkinter/python khi sử dụng cxfreeze

Tôi đã đóng gói nó bằng cách sử dụng cx_freeze vào tệp exe và chạy nó từ đó hoạt động cho phần lớn chương trình. Tuy nhiên, nó có một vấn đề: khi cố gắng gán một giá trị cho một đối tượng StringVar ở một trong các hàm, một ngoại lệ được nâng lên và giết chết chương trình.

Khi chức năng tương tự được truy cập từ một điểm khác trong chương trình, nó hoạt động bình thường. Bất cứ ý tưởng những gì có thể là sai?

Phần mã gây ra vấn đề này là như sau (tôi đã thêm các bảng thông báo để tôi có thể xem những gì nó không thành công trên):

if keyDetail.get('default', False): 
    try: 
     self.entries[key].set(keyDetail['default']) 
    except Exception as err: 
     messagebox.showinfo('error', 'key: %s, default: %s, error: %s'%(key, keyDetail['default'], err)) 

self.entries[key] là một tk.StringVar.

Khi điều này được chạy, tôi nhận được thông báo sau trong bảng thông báo:

key: orderNo, default: Order Number, error: can't set "PY_VAR16:0"

+0

Tôi không chắc chắn tại sao Tcl sẽ không đặt giá trị cho biến không phải là mảng, vì nó sẽ tạo ra một biến ngay cả khi nó không tồn tại. Nhưng, nếu nó không phải là quá muộn cho chương trình của bạn, tip của tôi là để thả việc sử dụng các biến Tcl; bạn không cần nó trong mã Python của bạn. Ngoài ra, bạn có thích các biến toàn cục không? Khi bạn tạo một biến Tcl thông qua Tkinter, bạn luôn tạo ra các biến toàn cầu (không có bạn biết rõ). Nếu bạn đang ở trong mã Tcl thuần túy thì việc tạo các biến (cục bộ) là phải, nhưng bạn đã có những thứ như vậy trong Python. Bạn có thể sắp xếp để sử dụng Tkinter với họ. – mmgp

+0

@mmgp bạn cần biến Tcl cho những thứ như kích hoạt sự kiện khi biến thay đổi. – korylprince

+0

@Trengot - bạn có thể dán các phần khác của mã của bạn ở đây hoặc lên pastebin không? Tôi nghĩ rằng những điều trên là không đủ để nắm bắt vấn đề .. –

Trả lời

0

Xem ở trên để mô tả về vấn đề này. Lỗi không phải là:/phần mã này.

+0

Nếu lỗi không phải là phần mã này, thì chỉ cần xóa câu hỏi của bạn hoặc chỉnh sửa câu hỏi để có ý nghĩa. – nbro

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