self.right_stacked_Widget = QStackedWidget(self)什么意思
时间: 2024-05-21 15:11:20 浏览: 75
这段代码创建了一个 QStackedWidget 对象并将其指定为 self 对象的 right_stacked_Widget 属性,表示将该 QStackedWidget 对象嵌入到主窗口中。QStackedWidget 是一个可以容纳多个 QWidget 的容器,但在同一时间只能显示一个 QWidget,通过切换不同的 QWidget 可以实现界面切换。
相关问题
class LoginWindow(QWidget): def init(self): super().init() self.initUI() def initUI(self): self.setFixedSize(800, 500) self.setWindowTitle('鸡爪称重系统') # 创建一个QStackedWidget控件 self.stacked_widget = QStackedWidget(self) self.stacked_widget.setGeometry(0, 0, 800, 500) # 创建Login界面 login_widget = QWidget() self.stacked_widget.addWidget(login_widget) # 在Login界面上创建一个按钮 button = QPushButton('开始称重', login_widget) button.move(100, 100) button.setGeometry(300, 200, 200, 50) button.clicked.connect(self.startWeighing) def startWeighing(self): # 创建一个新的QWidget info_widget = QWidget(self.stacked_widget) # 将info_widget添加到QStackedWidget中 self.stacked_widget.addWidget(info_widget) # 切换到新的QWidget self.stacked_widget.setCurrentWidget(info_widget) self.info_label = QLabel("员工信息", self) self.info_label.move(100, 50) self.info_label.setStyleSheet("font-size: 24px; color: black; background-color: #eee; border-radius: 10px;") self.id_label = QLabel("员工ID:", self) self.id_label.move(70, 100) self.id_label.setStyleSheet("font-size: 18px; color: black;") self.name_label = QLabel("姓名:", self) self.name_label.move(70, 150) self.name_label.setStyleSheet("font-size: 18px; color: black;") self.six_label = QLabel("性别:", self) self.six_label.move(70, 200) self.six_label.setStyleSheet("font-size: 18px; color: black;") self.sfz_label = QLabel("身份证:", self) self.sfz_label.move(70, 250) self.sfz_label.setStyleSheet("font-size: 18px; color: black;") self.tel_label = QLabel("电话:", self) self.tel_label.move(70, 300) self.tel_label.setStyleSheet("font-size: 18px; color: black;") self.setFixedSize(800, 500) self.setWindowTitle('员工信息') # 创建数字显示框和外框 value_widget = QWidget(self) value_widget.setGeometry(500, 100, 200, 100) self.lcd_1 = QLCDNumber(value_widget) self.lcd_1.setSegmentStyle(QLCDNumber.Flat) self.lcd_1.setDigitCount(10) self.lcd_1.display('0 KG') # self.thread = DataThread() # self.thread.valueUpdated.connect(self.lcd_1.display) # self.thread.start() hbox_layout = QHBoxLayout(value_widget) hbox_layout.addWidget(self.lcd_1) hbox_layout.setContentsMargins(0, 0, 0, 0) hbox_layout.setSpacing(0) value_widget.setStyleSheet(''' background-color: #eee; border-radius: 10px; border: 2px solid black; ''') # 创建返回按钮 back_button = QPushButton('返回', self) back_button.setGeometry(600, 400, 100, 50) back_button.clicked.connect(self.backToLoginWindow) # 设置窗口大小和标题 self.setFixedSize(800, 500) self.setWindowTitle('员工信息') def backToLoginWindow(self): self.stacked_widget.setCurrentIndex(0)没有显示label
根据代码,我发现在 `startWeighing` 函数中,所有的 QLabel 都是使用 self 作为 parent 创建的,但是在代码中,self 指的是 LoginWindow,而不是 info_widget。所以,应该将所有的 QLabel 的 parent 改为 info_widget,才能正确显示。修改后的代码如下:
```
class LoginWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setFixedSize(800, 500)
self.setWindowTitle('鸡爪称重系统')
# 创建一个QStackedWidget控件
self.stacked_widget = QStackedWidget(self)
self.stacked_widget.setGeometry(0, 0, 800, 500)
# 创建Login界面
login_widget = QWidget()
self.stacked_widget.addWidget(login_widget)
# 在Login界面上创建一个按钮
button = QPushButton('开始称重', login_widget)
button.move(100, 100)
button.setGeometry(300, 200, 200, 50)
button.clicked.connect(self.startWeighing)
def startWeighing(self):
# 创建一个新的QWidget
info_widget = QWidget(self.stacked_widget)
# 将info_widget添加到QStackedWidget中
self.stacked_widget.addWidget(info_widget)
# 切换到新的QWidget
self.stacked_widget.setCurrentWidget(info_widget)
# 创建员工信息
self.info_label = QLabel("员工信息", info_widget)
self.info_label.move(100, 50)
self.info_label.setStyleSheet("font-size: 24px; color: black; background-color: #eee; border-radius: 10px;")
self.id_label = QLabel("员工ID:", info_widget)
self.id_label.move(70, 100)
self.id_label.setStyleSheet("font-size: 18px; color: black;")
self.name_label = QLabel("姓名:", info_widget)
self.name_label.move(70, 150)
self.name_label.setStyleSheet("font-size: 18px; color: black;")
self.six_label = QLabel("性别:", info_widget)
self.six_label.move(70, 200)
self.six_label.setStyleSheet("font-size: 18px; color: black;")
self.sfz_label = QLabel("身份证:", info_widget)
self.sfz_label.move(70, 250)
self.sfz_label.setStyleSheet("font-size: 18px; color: black;")
self.tel_label = QLabel("电话:", info_widget)
self.tel_label.move(70, 300)
self.tel_label.setStyleSheet("font-size: 18px; color: black;")
self.setFixedSize(800, 500)
self.setWindowTitle('员工信息')
# 创建数字显示框和外框
value_widget = QWidget(info_widget)
value_widget.setGeometry(500, 100, 200, 100)
self.lcd_1 = QLCDNumber(value_widget)
self.lcd_1.setSegmentStyle(QLCDNumber.Flat)
self.lcd_1.setDigitCount(10)
self.lcd_1.display('0 KG')
hbox_layout = QHBoxLayout(value_widget)
hbox_layout.addWidget(self.lcd_1)
hbox_layout.setContentsMargins(0, 0, 0, 0)
hbox_layout.setSpacing(0)
value_widget.setStyleSheet('''
background-color: #eee;
border-radius: 10px;
border: 2px solid black;
''')
# 创建返回按钮
back_button = QPushButton('返回', info_widget)
back_button.setGeometry(600, 400, 100, 50)
back_button.clicked.connect(self.backToLoginWindow)
# 设置窗口大小和标题
self.setFixedSize(800, 500)
self.setWindowTitle('员工信息')
def backToLoginWindow(self):
self.stacked_widget.setCurrentIndex(0)
```
这样就能正确显示所有的 QLabel 了。
def initUI(self): self.setFixedSize(800, 500) self.setWindowTitle('鸡爪称重系统') # 创建一个QStackedWidget控件 self.stacked_widget = QStackedWidget(self) self.stacked_widget.setGeometry(0, 0, 800, 500) # 创建Login界面 login_widget = QWidget() self.stacked_widget.addWidget(login_widget) # 在Login界面上创建一个按钮 button = QPushButton('开始称重', login_widget) button.move(100, 100) button.setGeometry(300, 200, 200, 50)怎么点击按钮后跳转下个界面,class NextWindow(QWidget): def __init__(self): super().__init__() self.user_id = user_id self.initUI() # 打开串口 self.ser = serial.Serial('COM7', 9600, timeout=1) def initUI(self): # 创建用于显示员工信息的控件 self.info_label = QLabel("员工信息", self) self.info_label.move(100, 50) self.info_label.setStyleSheet("font-size: 24px; color: black; background-color: #eee; border-radius: 10px;") self.id_label = QLabel("员工ID:", self) self.id_label.move(70, 100) self.id_label.setStyleSheet("font-size: 18px; color: black;") self.name_label = QLabel("姓名:", self) self.name_label.move(70, 150) self.name_label.setStyleSheet("font-size: 18px; color: black;") self.six_label = QLabel("性别:", self) self.six_label.move(70, 200) self.six_label.setStyleSheet("font-size: 18px; color: black;") self.sfz_label = QLabel("身份证:", self) self.sfz_label.move(70, 250) self.sfz_label.setStyleSheet("font-size: 18px; color: black;") self.tel_label = QLabel("电话:", self) self.tel_label.move(70, 300) self.tel_label.setStyleSheet("font-size: 18px; color: black;") self.setFixedSize(800, 500) self.setWindowTitle('员工信息')
您可以在按钮的clicked信号中添加槽函数,槽函数中调用setCurrentIndex()方法来切换到下一个界面,例如:
```
class LoginWidget(QWidget):
def __init__(self, stacked_widget):
super().__init__()
self.stacked_widget = stacked_widget
self.initUI()
def initUI(self):
self.button = QPushButton('开始称重', self)
self.button.setGeometry(300, 200, 200, 50)
self.button.clicked.connect(self.goto_next_window)
def goto_next_window(self):
next_window = NextWindow()
self.stacked_widget.addWidget(next_window)
self.stacked_widget.setCurrentWidget(next_window)
```
在初始化LoginWidget时传入QStackedWidget控件的引用,然后在goto_next_window()方法中新建一个NextWindow实例并添加到QStackedWidget中,最后调用setCurrentWidget()方法切换到下一个界面。
阅读全文