2015-10-23 13 views
10

Tôi đang sử dụng py2app 0.9 trên Mac OSX Yosemite 10.10.1 chạy Python 3.4 từ phân phối anaconda và với Tcl 8.5.py2app xây dựng ok nhưng ứng dụng không thành công với "_tkinter.TclError" (và không có thông báo lỗi!)

Trong nỗ lực trước đây, việc xây dựng sẽ thất bại, nhưng tìm kiếm nhanh cho thấy giải pháp cho những vấn đề này (tức là bao gồm cả 'gói': ['tkinter', 'matplotlib'] trong OPTIONS trong setup.py, và thay đổi dòng 49 của MachOGraph.py: loader -> loader_path)

Bây giờ py2app kết thúc xây dựng, và chạy trong chế độ Bí danh các chức năng ứng dụng của tôi, nhưng khi tôi xây dựng trong chế độ bình thường (python setup.pypy2app) ứng dụng kết quả sẽ không mở và giao diện điều khiển cho thấy traceback sau:

traceback (m ost gọi gần đây cuối cùng): File "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ boot .py", dòng 355, trong _run() File "/ Người dùng /ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/ khởi động .py ", dòng 336, trong _run exec (biên dịch (nguồn, đường dẫn, 'exec'), globals(), globals()) Tệp "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py", dòng 731, trong app = fishingapp() Tệp "/ Người dùng/ryankeenan /Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/deani.py ", dòng 536, trong init tk.Tk. init (tự, * args, ** kwargs) File "/Users/ryankeenan/Desktop/fishing/gui_test/dist/deani.app/Contents/Resources/lib/python3.4/tkinter/ init py ", dòng 1851, trong init self.tk = _tkinter.create (screenname, basename, className, tương tác, wantobjects, useTk, đồng bộ, sử dụng) _tkinter.TclError

điều bực bội là nó không in bất kỳ thông báo lỗi nào cho "_tkinter.TclError". Tôi đã tìm kiếm khá nhiều và không tìm thấy bất kỳ giải pháp hoặc bản sao của vấn đề này. Tôi đã thử xây dựng các ứng dụng dựa trên tkinter khác nhau và tất cả đều thất bại trong cùng một cách.

Điều này xảy ra ở lần gọi đầu tiên tới tk.Tk. init (tự, * args, ** kwargs) trong mã của tôi.

tập tin setup.py của tôi trông như thế này:

from setuptools import setup 
APP = ['deani.py'] 
DATA_FILES = [] 
OPTIONS = {'packages': ['tkinter','matplotlib'],'argv_emulation': True} 
setup( 
    app=APP, 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS},  
    setup_requires=['py2app'],) 

Trả lời

0

Tôi đã có vấn đề này và phát hiện ra rằng đó là do các phiên bản mâu thuẫn của tcl/tk trong /Library/Frameworks. Kiểm tra đầu ra của bản dựng (đảm bảo xóa bản dựng cũ trước) để tham chiếu đến các phiên bản tcl/tk khác nhau. Tôi thấy rằng phiên bản tcl/tk hiện tại của tôi là 8,6 mà py2app đang liên kết đến, nhưng đồng thời py2app đã sao chép các tệp từ tcl/tk 8.5. Tôi đã giải quyết vấn đề bằng cách xóa 8.5 khỏi `/Library/Frameworks/(Tcl/Tk).framework/Versions.

LƯU Ý: Tôi không khuyên bạn nên xóa phiên bản trừ khi bạn thấy sự cố trong kết quả xây dựng và biết rằng không có gì khác (mà bạn quan tâm) phụ thuộc vào phiên bản đó.

Tuy nhiên, đây không phải là lỗi duy nhất của tôi, bởi vì khi tôi xóa phiên bản cũ, tôi đã phát hiện ra lỗi _tkinter.Tcl mới, chỉ ra lỗi trong mã của tôi. Nếu bạn muốn xem traceback mà không cần phải đi đến giao diện điều khiển, tôi đề nghị đặt một tuyên bố cố gắng/ngoại trừ xung quanh mã bắt đầu của bạn mà in traceback vào một tập tin. Ví dụ:

 import sys, time, traceback  
     try: 
      run()#Your opening code goes here 
     except: 
      with open('/Path/to/somewhere/tb.txt','a') as file: 
       y,mn,d,h,m,s,a,b,c = time.localtime() 
       file.write("==================="+str(mn)+'/'+str(d)+' '+ 
          str(h)+':'+str(m)+':'+str(s)+ 
          "=====================\n") 
       traceback.print_exc(file=file) 

Hy vọng điều này sẽ hữu ích.

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