问答

PyQt5如何动态生成窗口组件?

作者:admin 2021-07-06 我要评论

PyQt5如何动态生成窗口组件? 有时候希望一次得到多个不确定的字符串输入,下面代码在 self.label[i] = QtWidgets.QLabel(label_str)行出现错误提示,“ has no ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

PyQt5如何动态生成窗口组件?
有时候希望一次得到多个不确定的字符串输入,下面代码在 self.label[i] = QtWidgets.QLabel(label_str)行出现错误提示,“ has no attribute label ”错误,组件不支持下标,恳请高人指教。

#getstring
def getInputboxs(label_strs):
    '''Return the utf-8 string of text that you write in the lineEdit.
        label_strs: the string as the prompt of the label in the dialog.'''
    from PyQt5 import QtGui, QtCore, QtWidgets
    import sys
    width=800
    #height=100

    class MyWindows(QtWidgets.QDialog):

        input_str = ''

        def __init__(self):
            QtWidgets.QDialog.__init__(self)
            self.setWindowTitle(u'GUI Input')
            n=len(label_strs)
            self.resize(width,60+35*n) 
            self.ok = QtWidgets.QPushButton('确定')
            self.ok.clicked.connect(self.getLine)

            self.clean = QtWidgets.QPushButton('清空')
            self.clean.clicked.connect(self.cleaning)

            self.cancel = QtWidgets.QPushButton('取消')
            self.cancel.clicked.connect(self.quit)
            #self.setWindowTitle(label_strs)
            for i, label_str in enumerate(label_strs):
                self.label[i] = QtWidgets.QLabel(label_str)
                self.lineEdit[i] = QtWidgets.QLineEdit()

            layout = QtWidgets.QGridLayout()
            layout.addWidget(self.ok, 2*n-1, 1, 1, 1)
            layout.addWidget(self.clean, 2*n-1, 2, 1, 1)
            layout.addWidget(self.cancel, 2*n-1, 3, 1, 1)
            
            for i, label_str in enumerate(label_strs):
                layout.addWidget(self.label[i], 2*i, 0, 1, 4)
                layout.addWidget(self.lineEdit[i], 2*i+1, 0, 1, 4)

            self.setLayout(layout)

            MyWindow.input_str = ['' *len(label_strs)]

        def getLine(self):
            for i in range(len(label_strs)):
                #MyWindows.input_str = str(self.lineEdit.text().toUtf8())
                MyWindows.input_str[i] = str(self.lineEdit[i].text())
            self.close()

        def cleaning(self):
            for i in range(len(label_strs)):
                self.lineEdit[i].setText('')

        def quit(self):
            MyWindows.input_str = ['' *len(label_strs)]
            self.close()

    app = QtWidgets.QApplication(sys.argv)
    win = MyWindows()
    win.show()
    app.exec_()
    return MyWindows.input_str

if __name__ == '__main__':
    pre_str = getInputboxs(['输入字符串1','输入字符串2','输入字符串3'])
    print (pre_str)

    pre_str = getInputbox('输入字符串')
    print (pre_str)
###

类变量未先声明就使用。应该先声明如

self.label = [None] * len(label_strs)
###

谢谢,可以啦

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PyQt5如何动态生成窗口组件?

    PyQt5如何动态生成窗口组件?

  • 关于hashmap与reentranlock的死锁问题

    关于hashmap与reentranlock的死锁问题

  • forge 中如何手动控制小地图的放大与缩

    forge 中如何手动控制小地图的放大与缩

  • 关于env-cmd 得问题,用过的来看下?

    关于env-cmd 得问题,用过的来看下?

腾讯云代理商
海外云服务器