如何将标签与我的选择列表对齐

问题描述 投票:-1回答:1

我正在使用PyQt5来创建一个GUI程序。

在QComboBox旁边创建标签时遇到问题。

如果我没有在QComboBox旁边创建一个标签,它看起来就像下面的图片。

enter image description here

但如果我添加标签,它将是这样的:

enter image description here

选择列表自动向下移动了一点。

如何使其与左侧的标签对齐?

(我的意思是在CASE TYPE旁边)

(我在我的代码中评论关键部分)

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5 import QtWidgets
import xml.etree.cElementTree as ET


class App(QMainWindow):

    def __init__(self,parent=None):
        super().__init__()
        self.title = "Automation"
        self.left = 10
        self.top = 10
        self.width = 400
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create textbox
        self.textbox = QLineEdit(self)
        self.textbox.move(80, 20)
        #self.textbox.resize(50,40)
        self.textbox2 = QLineEdit(self)
        self.textbox2.move(80, 80)
        #self.textbox2.resize(50,40)        

        # Create text beside editor
        wid1 = QWidget(self)
        self.setCentralWidget(wid1)
        mytext = QFormLayout()
        mytext.addRow("CASE INDEX",self.textbox)
        mytext.addRow("CASE TYPE",self.textbox2)
        wid1.setLayout(mytext)


        #################### Critical Part #######################
        self.CB = QComboBox()
        self.CB.addItems(["RvR","Turntable","Fixrate"])
        self.CB.currentIndexChanged.connect(self.selectionchange)
        label = QLabel("CASE TYPE")
        mytext.addRow(label,self.CB) # this one makes the list shift down a little bit

        mytext.addWidget(self.CB)
        wid1.setLayout(mytext)
        ##########################################################



        # Create a button in the window
        self.button = QPushButton('Show text', self)
        self.button.move(20,150)


        # connect button to function on_click
        self.button.clicked.connect(self.on_click)
        self.center()
        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.textbox.text()
        textboxValue2 = self.textbox2.text()
        QMessageBox.question(self, 'Message - pythonspot.com', "You typed: "+ textboxValue + " , second msg is: " + textboxValue2, QMessageBox.Ok, QMessageBox.Ok)
        print(textboxValue)
        self.textbox.setText("")
        self.textbox2.setText("")

    def center(self):  
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())  

    def selectionchange(self,i):
        print ("Items in the list are :")

        for count in range(self.CB.count()):
            print (self.CB.itemText(count))
        print ("Current index",i,"selection changed ",self.CB.currentText())



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

拜托我需要你的帮忙。谢谢。

python-3.x user-interface pyqt
1个回答
1
投票

试试吧:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui     import *
from PyQt5.QtCore    import *
from PyQt5 import QtWidgets
import xml.etree.cElementTree as ET


class App(QMainWindow):

    def __init__(self,parent=None):
        super().__init__()

        self.title  = "Automation"
        self.left   = 10
        self.top    = 10
        self.width  = 400
        self.height = 200

        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create textbox
        self.textbox = QLineEdit(self)
#       self.textbox.move(80, 20)
        #self.textbox.resize(50,40)
        self.textbox2 = QLineEdit(self)
#        self.textbox2.move(80, 80)
        #self.textbox2.resize(50,40)        

        # Create text beside editor
        wid1 = QWidget(self)
        self.setCentralWidget(wid1)

        mytext = QFormLayout()    
        mytext.addRow("CASE INDEX", self.textbox)
        mytext.addRow("CASE TYPE",  self.textbox2)
#        wid1.setLayout(mytext)


        #################### Critical Part #######################
        self.CB = QComboBox()
        self.CB.addItems(["RvR","Turntable","Fixrate"])
        self.CB.currentIndexChanged.connect(self.selectionchange)
        label = QLabel("CASE TYPE")
        mytext.addRow(label, self.CB) # this one makes the list shift down a little bit

#        mytext.addWidget(self.CB)
#        wid1.setLayout(mytext)
        ##########################################################



        # Create a button in the window
        self.button = QPushButton('Show text', self)
#        self.button.move(20,150)


        # connect button to function on_click
        self.button.clicked.connect(self.on_click)

        layoutV = QVBoxLayout(wid1)                            # + wid1  <<<======== 
        layoutV.addLayout(mytext)                              # +
        layoutV.addWidget(self.button, alignment=Qt.AlignLeft) # +

        self.center()
        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.textbox.text()
        textboxValue2 = self.textbox2.text()
        QMessageBox.question(self, 'Message - pythonspot.com', "You typed: "+ textboxValue + " , second msg is: " + textboxValue2, QMessageBox.Ok, QMessageBox.Ok)
        print(textboxValue)
        self.textbox.setText("")
        self.textbox2.setText("")

    def center(self):  
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())  

    def selectionchange(self,i):
        print ("Items in the list are :")

        for count in range(self.CB.count()):
            print (self.CB.itemText(count))
        print ("Current index",i,"selection changed ",self.CB.currentText())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.