标签: qwidget

PyQt5:如何获取显示小部件的尺寸

我有 PyQt5 QLabels 随着 QMainWindow 大小的变化而扩展/收缩。当 QMainWindow 的大小调整为其初始尺寸以外的任何值时,我想获取 QLabels 的尺寸。

下面的脚本在 QMainWindow 中创建两个 QLabel。QLabel 展开,但顶部 QLabel 具有固定高度。QMainWindow 的创建尺寸为 400x300,并显示为最大化屏幕showMaximized()(在我的例子中为 1920 x 1080)。该脚本在 QMainWindow 显示之前和之后打印 QLabels 的尺寸。在显示之前,width()返回height()默认的 QLabel 值,在显示之后(屏幕最大化)width()height()返回值,就好像 QMainWindow 的物理尺寸为 400x300 一样。这是打印的 wat:

label_1 Size Before Expanding:  100 100
label_2 Size Before Expanding:  100 30
label_1 Size After Expanding:  378 100
label_2 Size After Expanding:  378 171
Run Code Online (Sandbox Code Playgroud)

当 QMainWindow 最大化时,如何获得 QLabels 的真实尺寸?我是在Windows环境下运行的。

from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy, QLabel, QVBoxLayout, …
Run Code Online (Sandbox Code Playgroud)

dimensions qwidget qlabel pyqt5 pyside2

1
推荐指数
1
解决办法
3066
查看次数

QWidget 的 QT 绘制事件

我有一个继承 QPushButton 小部件的类。我想要该按钮的自定义外观,因此我覆盖了paintEvent 方法。我想绘制的所有按钮都是 QFrame 对象的子项。

我有一个问题。我不能重绘那些对象。

我的paintEvent函数:

void Machine::paintEvent(QPaintEvent*) {
    QPainter painter(this);
    QRect geo = this->geometry();

    int x, y, width, height;

    x = geo.x()-10;
    y = geo.y()-10;
    width = geo.width()-3;
    height = geo.height()-5;

    painter.fillRect(x, y, width, height, QColor(220,220,220));

    painter.drawText(x+10, y+10, "Machine " + QString::number(id));
}
Run Code Online (Sandbox Code Playgroud)

当小部件位于 QFrame 的左上角时,所需的效果就可以了。但是当我将按钮移到其他地方时,小部件开始消失。在图像上,您可以看到发生了什么:

在此处输入图片说明

按钮只是向左下方移动了一些 px。为什么它像这样工作?作为该按钮的容器的 QFrame 足够大。

提前致谢 ;)

qt qwidget

0
推荐指数
1
解决办法
2万
查看次数

QHBoxLayout间距

我有一个QHBoxLayout包括两个QLabel小部件.我的左边QLabel比右边大得多QLabel,但是,QHBoxLayout将输出分成两半,因此布局的左侧太小而布局的右侧太大.如何修改QHBoxLayout为每个包含的小部件创建不等比例的空间?

c++ qt qwidget qlayout

0
推荐指数
1
解决办法
1863
查看次数

从QLayout删除QWidget?

QVBoxLayoutQWidget在运行时创建的对象动态填充。我也想在运行时将其删除,但是如何?

我可以一一删除小部件:

void QLayout::removeWidget(QWidget * widget)
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式遍历布局吗?

qt qwidget qlayout qvboxlayout qt5.4

0
推荐指数
1
解决办法
1415
查看次数

PyQt5 添加自定义 QWidget 到 QLayout

目前我正在尝试将自定义 QWidget 类添加到 QVBoxLayout。我遇到的问题是小部件根本没有出现在布局中。我什至尝试设置 QWidget 的最小大小,因为我认为小部件没有显示,因为它的默认大小设置为零。

这是类的简化:

class myWidget(QWidget):

    def __init__(self):
        super().__init__()

        # Slider
        self.mySlider = QSlider(Qt.Horizontal)
        self.mySlider.setRange(-360, 360)

        # LCD Screen
        self.lcd = QLCDNumber()
        self.lcd.setMinimumHeight(45)
        self.lcd.setMaximumHeight(75)

        # set Size
        self.setMinimumSize(QSize(400,300))
Run Code Online (Sandbox Code Playgroud)

我删除了滑块和 LCD 屏幕之间的信号和插槽,因为我在这里不担心功能。只有我在以下代码中的两个按钮之间直接获得了 QSize(400,300) 的灰色区域:

class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        #Create Widgets to be Added to Central Widget
        self.w1 = QPushButton("First")
        self.w2 = myWidget()
        self.w3 = QPushButton("Third")

        #Set Central Widget and VBox
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        #Add widgets
        self.layout.addWidget(self.w1)
        self.layout.addWidget(self.w2)
        self.layout.addWidget(self.w3)
Run Code Online (Sandbox Code Playgroud)

所以我所做的只是创建 3 个小部件,并将它们放入中央小部件内的 QVBoxLayout …

python qt pyqt qwidget qlayout

0
推荐指数
1
解决办法
2732
查看次数

QWidget for Image

我试图QGridLayout在PyQt5中创建一个简单的图像,但发现自己卡住了因为QGridLayout只有通过.addWidget()和添加小部件和布局的功能.addLayout().

下面是我的代码,期望QWidget但有问题,因为我似乎无法找到任何QWidgets可以处理png/jpg文件.

class myGrid(QWidget):
    def __init__(self):
        QObject.__init__(self)

        # Create Layout
        self.lay = QGridLayout()
        self.setLayout(self.lay)

        i1 = QIcon("imgs/img1.png")
        i2 = QIcon("imgs/img2.png")
        i3 = QIcon("imgs/img3.png")
        i4 = QIcon("imgs/img4.png")

        # Add Images to Layout
        self.lay.addWidget(i1, 0, 0)    # Error because type(i1) != QWidget
Run Code Online (Sandbox Code Playgroud)

以上只是我想要添加到布局中的第一个图像.唯一的问题是,因为QIcon技术上不是QWidget我收到编译器错误.

我看了看其他QObjects的是处理图像,包括QImageQPainter而是因为这些类的类型都是QtGui我无法将它们传递到我的网格.

有关如何QWidget从图像生成或使用特定QWidget处理图像的任何建议?

qt qwidget qgridlayout qt5 pyqt5

0
推荐指数
1
解决办法
622
查看次数

在另一个 Widget 中更改 QWidget 的背景颜色

我有一个小部件,我将它放在另一个小部件中,我希望将它变成黑色。我正在使用以下代码。

这是我的内部小部件构造函数:

内部组件.cpp

#include "innerwidget.h"
#include <QStyle>

InnerWidget::InnerWidget(QWidget *parent) : QWidget(parent)
{
    setMinimumSize(1280,70);
    this->setStyleSheet("background-color: black");
    style()->unpolish(this);
    style()->polish(this);
    update();
}
Run Code Online (Sandbox Code Playgroud)

这是我的外部小部件构造函数:

外部小部件.cpp

#include "outerwidget.h"
#include <QGridLayout>

OuterWidget::OuterWidget(QWidget *parent)
    : QWidget(parent)
{
    setMinimumSize(1280, 800);
    setMaximumSize(1280,800);
    innerWidget = new InnerWidget(this);
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(innerWidget, 0, 0, 0, 4, Qt::AlignTop);
    this->setLayout(layout);
    this->setWindowState(Qt::WindowFullScreen);
}

OuterWidget::~OuterWidget()
{

}
Run Code Online (Sandbox Code Playgroud)

我的主要是非常简单的默认代码:

主程序

#include "outerwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OuterWidget w;
    w.show();

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

我的头文件没什么特别的:

内部组件.h

#ifndef INNERWIDGET_H
#define …
Run Code Online (Sandbox Code Playgroud)

c++ qt qwidget

0
推荐指数
1
解决办法
735
查看次数

标签 统计

qwidget ×7

qt ×6

qlayout ×3

c++ ×2

pyqt5 ×2

dimensions ×1

pyqt ×1

pyside2 ×1

python ×1

qgridlayout ×1

qlabel ×1

qt5 ×1

qt5.4 ×1

qvboxlayout ×1