pyqt GridLayout 不显示widget

Darren_Chan 发布于 2016/08/26 14:33
阅读 582
收藏 0
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;

加载中
0
timlyrics
timlyrics

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

这里的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)


Darren_Chan
Darren_Chan
多谢回复。 我也写过10个buttons, btn1=QPushButton("1"), btn2=... 和这种情况一样。 tks anyway.
0
Darren_Chan
Darren_Chan
对了,后面加了 self.setLayout(layout),也不行的
0
lython
lython
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_())



返回顶部
顶部