Làm thế nào tôi có PyQt5 tôi, Python33 Windows7x64 trong một hoạt động virtualenv:
Thứ nhất, đảm bảo bạn đã xuất hiện 64 hoặc 32 bit của tất cả mọi thứ. Tôi đang phát triển trên nền tảng 64bit và đang sử dụng phiên bản 64 bit. Tôi đã không hoàn toàn kiểm tra điều này với 32 bit. Vui lòng đọc kỹ.
- Cài đặt Python33 x64 bằng cách sử dụng nhị phân trình cài đặt Windows.
- Cài đặt PyQt5 x64 từ bờ sông bằng trình cài đặt MSI vào mặc định Python33. PIP sẽ không hoạt động.
- Tạo virtualenv bằng cách sử dụng Python33 làm cơ sở của bạn, không có gói trang web.
- Sao chép thư mục PyQt5 từ Python33/Lib/site-packages/vào gói virtualenv/Lib/site-của bạn.
- KHÔNG XÓA thư mục PyQT5!
Đảm bảo PyQt5 đang làm việc trên cơ sở Python33 cài đặt:
from PyQt5 import QtCore, QtGui, QtWidgets
Tạo một cửa sổ chính và khởi động nó. Nếu thử nghiệm với mã PyQt4, một vài lớp đã được hoán đổi xung quanh. (Trong QtGui và QtWidgets ví dụ)
từ PyQt5 nhập khẩu QtGui, QtWidgets, QtCore
class Main(QtWidgets.QMainWindow):
def __init__(self):
print("Main __init__ fired")
QtWidgets.QMainWindow.__init__(self)
#Setup the UI
print("Setting up UI")
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
def main():
print("fired main()")
#Setup the main application object
app = QtWidgets.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
#Run GUI
if __name__ == "__main__":
main()
Nếu bạn nhận được lỗi này "..failed để bắt đầu, không thể tìm thấy hoặc tải các nền tảng Qt Plugin" cửa sổ." (hoặc tương tự), bạn phải cập nhật DirectX của bạn. làm điều này thông qua Microsoft.
Một khi bạn đã hoàn toàn chắc chắn PyQt5 đang làm việc trong windows, sau đó tiếp tục.
- Kích hoạt virtualenv nơi bạn đã sao chép thư mục PyQt5 sang
Đảm bảo PyQt5 có thể được nhập từ bên trong virtualenv của bạn. Bạn có thể cần phải thao tác các đường dẫn tùy thuộc vào IDE bạn đang sử dụng. Chạy nhập khẩu virtualenv bạn
từ PyQt5 nhập khẩu QtCore, QtGui, QtWidgets
Cố gắng chạy các ứng dụng tương tự một lần nữa từ bên trong virtualenv này
OH NO! Một lỗi khác với dlls! Điều gì mang lại? Các đường dẫn đến các thư viện dll QT là sai bên trong virtualenv. Nó xảy ra ngay cả khi bạn nói PyQt5 để cài đặt trực tiếp vào virtualenv của bạn. Bạn PHẢI thêm đường dẫn vào thư việnPaths trước khi tạo đối tượng QApplication. Dưới đây là một giải pháp (Thay venv với đường virtualenv bạn):
def main():
print("fired main()")
#ADD THE FOLLOWING BEFORE CREATING A QApplication()
QtCore.QCoreApplication.setLibraryPaths(['C:/venv/Lib/site-packages/PyQt5/plugins'])
#Ensure path was added and correct
print(QtCore.QCoreApplication.libraryPaths())
#Setup the main application object
app = QtWidgets.QApplication(sys.argv)
#See what the paths were
print(app.libraryPaths())
window = Main()
window.show()
sys.exit(app.exec_())
Bây giờ mã nên chạy từ tất cả các bên trong virtualenv của bạn. Bạn có thể xóa thư mục PyQt5 khỏi bản cài đặt cơ sở của mình hoặc chuyển thư mục đó sang địa điểm khác nếu bạn cần trong tương lai.
Có nhiều khả năng là cách để lồng vào đường dẫn theo cách tương đối, nhưng điều này có thể tạo ra sự cố với sự cố đóng băng. Nói về mà.
Bây giờ bạn đã hoàn tất và bạn sẽ chuyển sang ứng dụng PyQt5 của bạn thành một ứng dụng tuyệt vời. Bạn hãy chạy nó và OH NO! nhiều sự cố dll.
Bạn có thể sao chép thủ công libEGL.dll từ gói trang web/PyQt5 vào thư mục gốc của ứng dụng hoặc thêm các dòng sau vào thiết lập của bạn.tập tin py cho cx-đóng băng:
import sys
from cx_Freeze import setup, Executable
#ADD THIS MUST INCLUDE FOR Windows 7.
include_files = [('c:/venv/Lib/site-packages/PyQt5/libEGL.dll', 'libEGL.dll')]
setup(
name="My App",
version="0.1",
description="PyQt5 App.",
#ADD THIS
options={'build_exe': {'include_files': include_files}},
executables=[Executable("c:/venv/src/myApp_main.py",
base="Win32GUI",
targetName="MyApp.exe")])
'đang trả về lỗi' Bạn có nghĩ rằng chính xác lỗi nào sẽ giúp giải quyết vấn đề của bạn? –
Tôi không phải OP, nhưng tôi gặp lỗi 'FileNotFoundError: [Errno 2] Không có tệp hoặc thư mục nào như vậy: '/ home/naught101/.virtualenvs/virtualenv-3/build/sip/setup.py'', khi chạy 'pip install sip'. Không có khiếu nại nào khác. – naught101