问题代码(例)
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont, QIcon, QCursor, QPixmap
import sys
class FrameToplevel(QFrame):
def __init__(self, parent=None):
super().__init__(parent)
self.setFrameStyle(QFrame.Panel | QFrame.Sunken)
self.setLineWidth(6)
self.setMidLineWidth(10)
self.setStyleSheet('background-color: #0098de;')
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(750, 610)
# 自定义鼠标
self.setCursor(QCursor(QPixmap('mouse.png').scaled(30, 30), 0, 0))
# frame窗口边的宽度
self.frameWidth = 3
self.setup_ui()
# 设置主窗口组件
def setup_ui(self):
# 设置“录入信息”按钮
button = QPushButton(self)
button.setText('按钮')
button.move(100, 100)
button.resize(100, 100)
button.clicked.connect(self.window_enter_modify)
# 设置顶层frame窗口
self.frameToplevel = FrameToplevel(self)
self.frameToplevel.move(220, 100)
self.frameToplevel.resize(520, 500)
# 录入和修改功能执行窗口
def window_enter_modify(self):
# 设置姓名标签以及输入框
Label = QLabel(self.frameToplevel)
Label.setText('测试代码')
Label.move(100, 100)
print(1)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = MainWindow()
# 创建font字体
font_textEdit = QFont('宋体', 11)
mainwindow.show()
sys.exit(app.exec_())
运行结果:
如以上运行结果所示,点击按钮后,按钮连接的槽函数开始运行,控制台打印结果,但是Frame窗口上并未出现Label
标签。
原因和解决方法
原因是:在构建QFrame窗体时就已经写入了窗体可视化,窗口在创建后直接被绘制,使得后面的组件放置后不可见。
解决方法:
- 在创建窗体的后隐藏窗体,在组件全部构建完成后添加回来。
# 设置主窗口组件
def setup_ui(self):
# 设置“录入信息”按钮
button = QPushButton(self)
button.setText('按钮')
button.move(100, 100)
button.resize(100, 100)
button.clicked.connect(self.window_enter_modify)
# 设置顶层frame窗口
self.frameToplevel = FrameToplevel(self)
self.frameToplevel.move(220, 100)
self.frameToplevel.resize(520, 500)
self.frameToplevel.hide() # 隐藏Frame窗体
# 录入和修改功能执行窗口
def window_enter_modify(self):
# 设置姓名标签以及输入框
Label = QLabel(self.frameToplevel)
Label.setText('测试代码')
Label.move(100, 100)
self.frameToplevel.show()
print(1)
运行结果:
点击按钮后出现Frame窗体
- 在槽函数中实现Frame窗口的创建,在组件创建完成后调用
show()
方法展示窗体。
# 录入和修改功能执行窗口
def window_enter_modify(self):
# 设置顶层frame窗口
self.frameToplevel = FrameToplevel(self)
self.frameToplevel.move(220, 100)
self.frameToplevel.resize(520, 500)
self.frameToplevel.hide()
# 设置姓名标签以及输入框
Label = QLabel(self.frameToplevel)
Label.setText('测试代码')
Label.move(100, 100)
self.frameToplevel.show()
print(1)
运行结果: