Vì vậy, tôi đã tạo GUI với Qt cho ứng dụng Python của mình. Bây giờ tôi đã đi đến một tình huống mà sau khi một nút đã được đẩy hoãn thích hợp được thực hiện, chúng tôi thực hiện một số nhiệm vụ sau đó tôi cần phải mở ra một cửa sổ riêng biệt có chứa một hoặc hai điều. Nhưng tôi không thể tìm ra cách để tạo ra cửa sổ riêng biệt mới này. Bất cứ ai có thể cho tôi một ví dụ về làm thế nào để tạo ra một?Python: Cửa sổ bật lên PyQt
Trả lời
Lỗi phổ biến có thể khiến bạn phát điên là lưu trữ tay cầm của cửa sổ bật lên mà bạn tạo trong biến số python sẽ vẫn còn sống (ví dụ: trong thành viên dữ liệu của cửa sổ chính).
Sau đây là một chương trình đơn giản mà tạo ra một cửa sổ chính với một nút nơi nhấn vào nút mở một popup
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
from PyQt4.Qt import *
class MyPopup(QWidget):
def __init__(self):
QWidget.__init__(self)
def paintEvent(self, e):
dc = QPainter(self)
dc.drawLine(0, 0, 100, 100)
dc.drawLine(100, 0, 0, 100)
class MainWindow(QMainWindow):
def __init__(self, *args):
QMainWindow.__init__(self, *args)
self.cw = QWidget(self)
self.setCentralWidget(self.cw)
self.btn1 = QPushButton("Click me", self.cw)
self.btn1.setGeometry(QRect(0, 0, 100, 30))
self.connect(self.btn1, SIGNAL("clicked()"), self.doit)
self.w = None
def doit(self):
print "Opening a new popup window..."
self.w = MyPopup()
self.w.setGeometry(QRect(100, 100, 400, 200))
self.w.show()
class App(QApplication):
def __init__(self, *args):
QApplication.__init__(self, *args)
self.main = MainWindow()
self.connect(self, SIGNAL("lastWindowClosed()"), self.byebye)
self.main.show()
def byebye(self):
self.exit(0)
def main(args):
global app
app = App(args)
app.exec_()
if __name__ == "__main__":
main(sys.argv)
Những gì tôi nghĩ có thể gây ngạc nhiên cho người dùng Python và có thể là vấn đề bạn đang phải đối mặt là thực tế là nếu bạn không lưu trữ tham chiếu đến tiện ích mới trong ví dụ chính bằng cách sử dụng w = MyPopup(...)
thay vì self.w = MyPopup(...)
, cửa sổ dường như không xuất hiện (thực tế nó được tạo và bị phá hủy ngay lập tức).
Lý do là khi biến cục bộ w
vượt quá phạm vi vì không có ai rõ ràng tham chiếu đến tiện ích con, tiện ích sẽ bị xóa. Điều này có thể được nhìn thấy rõ ràng bởi vì nếu bạn nhấn một lần nữa nút bạn sẽ thấy rằng khi popup thứ hai xuất hiện đầu tiên được đóng lại. Điều này cũng có nghĩa là nếu bạn cần tạo một số cửa sổ bật lên bạn có ví dụ để đặt chúng trong danh sách python và bạn nên xóa chúng khỏi danh sách này khi cửa sổ bật lên được người dùng đóng lại. Tương đương trong ví dụ có thể thay đổi thành self.w = []
trong hàm tạo và sau đó thực hiện self.w.append(MyPopup(...))
. Làm như vậy sẽ cho phép bạn mở nhiều cửa sổ bật lên.
Nói chung, bạn chỉ cần hiển thị nhiều cửa sổ côi với someQWidget.show()
, như:
w1 = QLabel("Window 1")
w2 = QLabel("Window 2")
w1.show()
w2.show()
Nhưng rất có thể, bạn muốn có một tiêu chuẩn Dialog modal như this. Ngoài ra hãy chắc chắn để hiểu modal dialogs.
- 1. Cần trợ giúp để có cửa sổ bật lên Cửa sổ bật lên
- 2. Chiều rộng cửa sổ bật lên Bootstrap cho cửa sổ bật lên-bên trong
- 3. Selenium: Kiểm tra cửa sổ bật lên
- 4. Làm cách nào để tùy chỉnh cửa sổ bật lên QCompleter trong PyQt?
- 5. Cửa sổ bật lên MVC-pop
- 6. EditText Trên Cửa sổ bật lên
- 7. Cửa sổ bật lên trong Java Swing
- 8. facebook Cửa sổ bật lên Sharer
- 9. Cách đóng cửa sổ bật lên Liferay.util.openWindow?
- 10. Twitter OAuth qua cửa sổ bật lên
- 11. Bật cửa sổ bật lên từ dịch vụ
- 12. Đóng cửa sổ bật lên Safari bằng cách sử dụng nút bấm trong cửa sổ bật lên
- 13. Làm thế nào bạn có thể đảm bảo cửa sổ bật lên cửa sổ bật lên twitter được hiển thị?
- 14. Nhấp vào cửa sổ bật lên javascript qua webdriver
- 15. Mở cửa sổ thứ hai trong PyQt
- 16. pygtk đang chạy hai cửa sổ, cửa sổ bật lên và chính
- 17. Vô hiệu hóa cửa sổ bên dưới khi cửa sổ bật lên được tạo trong Python TKinter
- 18. Đặt kiểu cửa sổ trong PyQT/PySide?
- 19. Làm cách nào để tạo iframe bật lên trong cửa sổ bật lên Magnific?
- 20. Ngăn cuộn nền khi hiển thị cửa sổ bật lên
- 21. Cửa sổ bật lên Twitter Bootstrap không tải
- 22. Cách đóng cửa sổ bật lên lộng lẫy bằng jquery
- 23. jQuery Mobile mở cửa sổ bật lên khi tải trang
- 24. đầu vào javascript qua cửa sổ bật lên gốc
- 25. Vô hiệu hóa cửa sổ bật lên ASP.NET
- 26. Kích thước cửa sổ bật lên trong android
- 27. Chuyển sang cửa sổ bật lên trong dưa chuột, capybara
- 28. cửa sổ bật lên mới trên mỗi nhấp chuột
- 29. Bố cục bố cục sai trong cửa sổ bật lên
- 30. khi cửa sổ bật lên vẫn hiển thị
Đừng quên thêm self.setupUi (tự) vào __init__ của cửa sổ thứ 2 hoặc tiện ích nếu bạn đã tạo nó bằng Trình thiết kế. –