Tôi là người mới đối với PySide.I có một đối tượng cửa sổ chính hiển thị một tiện ích tại một thời điểm. Tôi đã cố gắng thay đổi widget trung tâm của lớp QMainWindow
để thay thế Widget hiển thị trong cửa sổ khi nhấn một nút. Vấn đề là nút được nhấn nằm trong lớp Widget, không phải trong lớp cửa sổ chính.Thay thế CentralWidget trong MainWindow
nói ...
class App(QtGui.QMainWindow):
def __init__(self):
super(App, self).__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Listo.') #Status Bar
self.login_screen = LoginScreen()
self.logged_in_screen = LoggedInScreen()
self.setCentralWidget(self.login_screen)
self.setGeometry(300, 300, 450, 600) #Window Size
self.setWindowTitle('PyTransactio - Client') #Window Title
self.setWindowIcon(QtGui.QIcon('icon.png')) #App Icon
self.show()
Nút nhấn là trong login_screen
dụ. Phương pháp gọi khi nút được click là bên trong lớp LoginScreen
:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
Thiết widget mẹ để None
loại bỏ các widget (login_screen
) từ cửa sổ chính. Tôi nên làm gì để nhận tiện ích con khác (ví dụ: logged_in_screen
) làm tiện ích con trung tâm của cửa sổ chính khi nhấn loginButton
(bên trong tiện ích login_screen
)?
Có thể phương thức đăng nhập phải nằm trong lớp cửa sổ chính? Nếu vậy, làm cách nào tôi có thể kết nối các nút được nhấn trong login_screen
bằng phương pháp của cửa sổ chính?
** QStackedWidget ** đã làm điều. Ngoài ra, tôi không bao giờ nghĩ về 'self.parent(). Login'. Đoán tôi sẽ phải làm việc trên OOP của tôi. Cảm ơn nhiều! –
Khi đặt làm tiện ích con trung tâm, QMainWindow sẽ sở hữu tiện ích đó. Khi đặt tiện ích con khác làm tiện ích con trung tâm, tiện ích con đầu tiên bị hủy, điều đó rất tệ. –
@ HrvojeT Vâng, đó là lý do tại sao câu trả lời của tôi sử dụng 'QStackedWidget' và không phải là hack, mà có thể yêu cầu một số mã xấu xí để hoạt động đúng. – Bakuriu