如何在初始化主窗口后添加标签小部件



我打算在MainWindow初始化后添加一个标签Widget。如果我在MainWindow中调用该函数,但不是从另一个函数调用,则该函数会被执行,但不会向窗口添加新标签。

QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
self.shadow = QGraphicsDropShadowEffect(self)
self.shadow.setBlurRadius(50)
self.shadow.setXOffset(0)
self.shadow.setYOffset(0)
self.ui.centralwidget.setGraphicsEffect(self.shadow)
self.setWindowTitle(" NetView ")
# QSizeGrip(self.ui.size_grip)
self.ui.minimizeBtn.clicked.connect(lambda: self.showMinimized())
self.ui.resmaxBtn.clicked.connect(lambda: self.restore_or_maximize_window())
self.ui.closeBtn.clicked.connect(lambda: self.close())
self.ui.lockBtn.clicked.connect(lambda: self.netLock())
self.ui.unlockBtn.clicked.connect(lambda: self.unLock())
## works fine
self.createNewWidget(0,0,"test")
def createNewWidget(self, rowNumber, columNumber, client_name):
new_label_name = 'label_'+client_name
#print(new_label_name)
self.label_new = QtWidgets.QLabel(self.ui.scrollAreaWidgetContents)
self.label_new.setMinimumSize(QtCore.QSize(200, 150))
self.label_new.setMaximumSize(QtCore.QSize(200, 150))
#self.label_new.setStyleSheet("background-color:rgb(255,85,255);")
self.label_new.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.label_new.setFrameShadow(QtWidgets.QFrame.Raised)
self.label_new.setObjectName(new_label_name)
def createdisplay(self)
##does not work
self.createNewWidget(0,1,"test1")

这是我最近创建的一个极其简单的GUI的例子,应该会给你一个答案:

Qlabel是你最应该注意的:(

class Window(QMainWindow): 
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi()

def setupUi(self):
self.setWindowTitle("Server Checker")
self.resize(300, 400)
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
# Create and connect widgets
self.textOutput = QPlainTextEdit(self)
self.textOutput.setReadOnly(True)
self.textOutput.resize(280, 300)
self.textOutput.move(10, 5)
self.serversCheckedtoScreen = QLabel("Servers Checked: ", self)
self.serversCheckedtoScreen.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
self.serversFailed = QLabel("Total Servers Offline: 0", self)
self.serversFailed.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

self.pbar = QProgressBar(self, objectName="progressBar")  
self.pbar.setGeometry(200, 80, 280, 20)
self.pbar.setValue(0)

self.pbar.setMinimum(0)
self.countBtn = QPushButton("Check Servers", self)
self.countBtn.clicked.connect(self.onButtonClick)
# Set the layout
layout = QVBoxLayout()
layout.addWidget(self.textOutput)
layout.addWidget(self.serversCheckedtoScreen)
layout.addWidget(self.serversFailed)
layout.addWidget(self.pbar)
layout.addWidget(self.countBtn)
self.pbar.setStyleSheet("""
QWidget {
text-align: center;
}
""")
self.centralWidget.setLayout(layout)

它创建了一个小窗口的实例,其中包含一个输出区域、两个标签和一个进度条。它还使用布局管理器。从技术上讲,缺少一个.show((,但我主要有那部分代码,因此这里缺少它。

最新更新