连接 QPushButton 的尺寸

发布于 2024-11-07 15:43:27 字数 870 浏览 0 评论 0原文

我有一个带有 QPushButtons 的网格状视图。按钮内容不是静态的,因此列大小会动态扩展。出于美观原因,我希望每列具有相同的列大小。

现在我在显示小部件后使用 adjustment_sizes 函数,因为我注意到如果我在显示小部件之前调用它,则不会发生任何变化。但我的解决方案对我来说似乎很难看。有更好的方法吗?

我的功能:

def adjust_sizes(self):
    max_width=0
    for i in self.buttons:
        if i.geometry().width() > max_width : 
            max_width=i.geometry().width()
    for i in self.buttons: i.setMinimumSize(max_width,0)

这就是我使用它的方式:

g=launcher()
g.show()
g.adjust_sizes()

有更好的方法吗?

编辑: 至于澄清,这里是所需的屏幕截图(看看 Raceyman 的答案):

所需的外观:

https://i.sstatic.net/ aJ9wO.png

这是我得到的:

在此处输入图像描述

我的系统:

Arch Linux x86_64, Python 3.2 或 2.7.1、PyQt 4.8.4、Qt 4.7.3

I have a grid-like view with QPushButtons. The buttons content isn't static, so the column sizes expands dynamically. And I want same column size for each column for aesthetical reasons.

Now I'm using an adjust_sizes function after showing the widget, because I noticed If I call it before showing the widget, nothing changes. But my solutions seems ugly to me. Is there a better way for that?

My function:

def adjust_sizes(self):
    max_width=0
    for i in self.buttons:
        if i.geometry().width() > max_width : 
            max_width=i.geometry().width()
    for i in self.buttons: i.setMinimumSize(max_width,0)

And thats how I use it:

g=launcher()
g.show()
g.adjust_sizes()

Is there a better way for doing that?

Edit:
As for clarify here is the desired screenshots(Look at Raceyman's answer):

Desired Look:

https://i.sstatic.net/aJ9wO.png

Here is what I get:

enter image description here

My System:

Arch Linux x86_64, Python 3.2 or 2.7.1, PyQt 4.8.4, Qt 4.7.3

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

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

发布评论

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

评论(1

失去的东西太少 2024-11-14 15:43:27

如果这不是真正的答案(评论有点长),我很抱歉,但我想知道您使用的 PyQt 版本是否可能是原因的一部分。我正在使用 4.8.3(我认为),当我使用 QGridLayout 以这种方式构建对话框时,默认情况下,列的大小都是相等的。这是一个(非常非常非常粗略的)示例:

from PyQt4 import QtGui, QtCore
import sys

class launcher(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        mainlayout = QtGui.QGridLayout()
        buttons = [['a', 'aaaa', 'aaaaaaa', 'a'], 
                   ['b', 'bbbbbbbbbb', 'bbbbb', 'b'], 
                   ['c','c','c', 'c']]
        for i, buttonrow in enumerate(buttons):
            for j, button in enumerate(buttonrow):                
                mainlayout.addWidget(QtGui.QPushButton(button), i, j)
        self.setLayout(mainlayout)
        self.exec_()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    g = launcher()
    g.show()

这是生成的对话框的屏幕截图:

在此处输入图像描述

希望这与您正在尝试做的事情类似。

My apologies if this isn't really an answer (it's a bit long for comments), but I'm wondering if the version of PyQt you're using might be part of the cause. I'm using 4.8.3 (I think), and when I build a dialog this way using QGridLayout the columns, by default, are all equal sizes. Here is a (very, very, very crude) example:

from PyQt4 import QtGui, QtCore
import sys

class launcher(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        mainlayout = QtGui.QGridLayout()
        buttons = [['a', 'aaaa', 'aaaaaaa', 'a'], 
                   ['b', 'bbbbbbbbbb', 'bbbbb', 'b'], 
                   ['c','c','c', 'c']]
        for i, buttonrow in enumerate(buttons):
            for j, button in enumerate(buttonrow):                
                mainlayout.addWidget(QtGui.QPushButton(button), i, j)
        self.setLayout(mainlayout)
        self.exec_()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    g = launcher()
    g.show()

Here is a screenshot of the resultant dialog:

enter image description here

Hopefully this is similar to what you are trying to do.

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