pyqt GridLayout 不显示widget

发布于 2021-11-27 21:34:22 字数 1172 浏览 924 评论 4

class MyCalc(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
 
        # make elements
        buttons = ["0", "1", "2", "3", "4", "5", "6",
                   "7", "8", "9", ".", "+", "-", "*", "/"]
 
        position = [(i,j) for i in range(5) for j in range(4)]
        layout = QGridLayout()
 
        for pos,name in zip(position,buttons):
            button = QPushButton(name)
            layout.addWidget(button, *pos)
 
        self.move(300, 150)
 
        self.show()
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MyCalc()
 
    sys.exit(app.exec_())

只能显示一个空的widget,不能显示buttons。为什么?
尝试修改成


button = QPushButton(name, self)
则所有的button都叠加显示在左上角(只有最后一个button在toppest,是available的)。
新手。
在发帖之前也想过一些办法和搜过一些可能的情况,均未果。
求帮助,多谢。


补充:

后面加了 self.setLayout(layout),也不行的

++++++

环境: Ubuntu 12.10 (不要吐槽版本太老)

Python 3.5.x; Qt 5.5; PyQt5_gpl-5.7;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

德意的啸 2021-12-04 00:08:06
import sys
from PyQt4.QtGui import *

class MyCalc(QWidget):
    def __init__(self):
        super(MyCalc, self).__init__()
        self.initUI()
  
    def initUI(self):
  
        # make elements
        buttons = ["0", "1", "2", "3", "4", "5", "6",
                   "7", "8", "9", ".", "+", "-", "*", "/"]
  
        position = [(i,j) for i in range(5) for j in range(4)]
        layout = QGridLayout()
  
        for pos,name in zip(position,buttons):
            button = QPushButton(name)
            layout.addWidget(button, *pos)
            
        self.setLayout(layout)
  
        self.move(300, 150)
  
        self.show()
  
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MyCalc()
    sys.exit(app.exec_())

顾忌 2021-12-03 23:58:00

对了,后面加了 self.setLayout(layout),也不行的

眼泪淡了忧伤 2021-12-03 23:30:20

多谢回复。 我也写过10个buttons, btn1=QPushButton("1"), btn2=... 和这种情况一样。 tks anyway.

琴流音 2021-11-30 02:09:44

没有运行你的代码,建议方向:

这里的button这个变量的scope很小,在你的for loop本次循环结束以后就被删除了。可以尝试一下用一个有persistent scope的list来储存每个button。

class MyCalc(QWidget):
    def __init__(self):
        ...
        self.buttonList = []

    def initUI(self):
        ...
        for ...
            button = QPushButton(name)
            self.buttonList.append(button)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文