<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「setMinimumSize」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/setminimumsize/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sun, 11 Jan 2026 05:17:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「setMinimumSize」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【PyQt】ウィジェットのサイズを制御する方法</title>
		<link>https://tech.nkhn37.net/pyqt-widget-size-control/</link>
					<comments>https://tech.nkhn37.net/pyqt-widget-size-control/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sat, 26 Nov 2022 20:00:00 +0000</pubDate>
				<category><![CDATA[PyQt]]></category>
		<category><![CDATA[setFixedSize]]></category>
		<category><![CDATA[setMaximumSize]]></category>
		<category><![CDATA[setMinimumSize]]></category>
		<category><![CDATA[setSizePolicy]]></category>
		<category><![CDATA[sizeHint]]></category>
		<category><![CDATA[sizePolicy]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=6156</guid>

					<description><![CDATA[PythonのGUIツールキットであるPyQtで画面要素であるウィジェットのサイズを制御する方法について紹介します。 ウィジェットのサイズを制御する方法 PyQtでは、画面作成のために様々なウィジェットを使用することがで [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">PythonのGUIツールキットであるPyQtで画面要素である<span class="marker"><strong>ウィジェットのサイズを制御する方法</strong></span>について紹介します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">ウィジェットのサイズを制御する方法</h2>



<p class="wp-block-paragraph">PyQtでは、画面作成のために様々なウィジェットを使用することができます。PyQtには、画面を拡大・縮小した時にウィジェットのサイズがどのように変わるのかを制御する仕組みがあります。</p>



<p class="wp-block-paragraph">本記事では、以下の簡単なサンプル画面を使ってウィジェットサイズを制御する方法を紹介していきます。サンプルはQTextEditとQPushButtonが垂直に配置されているとてもシンプルな画面です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import sys

from PyQt6 import QtCore as qtc
from PyQt6 import QtGui as qtg
from PyQt6 import QtWidgets as qtw


class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        # 画面タイトルの設定
        self.setWindowTitle("ウィジェットのサイズを制御する")
        # 画面サイズの設定
        self.resize(640, 360)

        # レイアウトの作成
        layout = qtw.QVBoxLayout()
        self.setLayout(layout)

        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        button = qtw.QPushButton("登録", self)

        # レイアウトにウィジェットを設定
        layout.addWidget(textedit)
        layout.addWidget(button)

        # 画面表示
        self.show()


def main():
    """メイン関数"""
    app = qtw.QApplication(sys.argv)
    mv = MainWindow()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()</pre>



<p class="wp-block-paragraph"><strong>【表示結果】</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="642" height="392" src="https://tech.nkhn37.net/wp-content/uploads/2022/11/image-155.png" alt="PyQt ウィジェットのサイズを制御する sizeHint sizePolicy" class="wp-image-6161" srcset="https://tech.nkhn37.net/wp-content/uploads/2022/11/image-155.png 642w, https://tech.nkhn37.net/wp-content/uploads/2022/11/image-155-300x183.png 300w" sizes="(max-width: 642px) 100vw, 642px" /></figure>
</div>


<p class="wp-block-paragraph">この画面で、QTextEditのサイズを変更する例を以降で見ていきます。以降の説明では、上記プログラムの一部変更箇所のみプログラムコードを示しますので、上記プログラムを書き換えつつ動かしてみてもらえるとよいかと思います。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">上記サンプルプログラムは以下で紹介しているような内容をベースにしています。興味があれば参考にしてください。</p>



<ul class="wp-block-list jinr-list">
<li><a href="https://tech.nkhn37.net/pyqt-qwidget-program-template/" target="_blank" rel="noreferrer noopener">QWidgetを継承した画面開発のテンプレート</a></li>



<li><a href="https://tech.nkhn37.net/pyqt-widgets-list/" target="_blank" rel="noreferrer noopener">画面開発で使えるQtWidgetsを紹介</a></li>



<li><a href="https://tech.nkhn37.net/pyqt-widget-layout/" target="_blank" rel="noreferrer noopener">ウィジェットのレイアウト方法</a></li>
</ul>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">固定サイズを設定する</h3>



<p class="wp-block-paragraph">最もシンプルな方法としてサイズを固定する方法について説明します。サイズを固定する場合には、以下のように<span class="marker"><strong>setFixedSize</strong></span>で(幅, 高さ)を指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        # ===== サイズを固定する
        textedit.setFixedSize(320, 180)
        # =====</pre>



<p class="wp-block-paragraph">この場合、画面を大きくしたり小さくしたりしても上記のQTextEditのサイズは変わりません。画面としての柔軟性は欠けますが、固定で出す方が適切な画面であればsetFixedSizeで決めてしまうのもよいでしょう。</p>



<h3 class="wp-block-heading jinr-heading d--bold">最小サイズと最大サイズを設定する</h3>



<p class="wp-block-paragraph">上記で説明したsetFixedSizeで固定サイズに決めてしまうと、画面の拡大・縮小に対する柔軟性に欠けてしまいます。</p>



<p class="wp-block-paragraph">画面サイズを設定するもう一つの方法として、画面サイズの最小値と最大値を設定する方法があります。この場合、最小値は<span class="marker"><strong>setMinimumSize</strong></span>、最大値は<span class="marker"><strong>setMaximumSize</strong></span>で(幅, 高さ)を指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        # ===== 最小・最大を設定
        textedit.setMinimumSize(320, 180)
        textedit.setMaximumSize(640, 360)
        # =====</pre>



<p class="wp-block-paragraph">上記のようにすると画面を小さくしようとしてもQTextEditは(幅, 高さ)＝(320, 180)よりも小さくはなりません。また、画面を大きく広げていくとQTextEditは最大でも(幅, 高さ)＝(640, 360)までしか拡大しません。</p>



<h3 class="wp-block-heading jinr-heading d--bold">サイズヒント(sizeHint)とサイズポリシー(sizePolicy)を使用する</h3>



<h4 class="wp-block-heading jinr-heading d--bold">基本的な考え方</h4>



<p class="wp-block-paragraph">上記で紹介してきた画面サイズを指定する方法の場合、どれだけのピクセル数が適切かを決めるのに悩む場合が多いかと思います。PyQtでは<span class="marker"><strong>サイズヒント(sizeHint)</strong></span>と<span class="marker"><strong>サイズポリシー(sizePolicy)</strong></span>というものを利用することでサイズに関する制御ができるようになっています。</p>



<p class="wp-block-paragraph">サイズヒント(sizeHint)は、ウィジェットサイズをプログラム側が提案してくれるもので、sizeHint()メソッドで取得することができます。一方、サイズポリシー(sizePolicy)は、サイズヒントに対してどのようなポリシーで画面サイズを制御するかというものを決めるです。</p>



<p class="wp-block-paragraph">PyQtでは、画面サイズ変更に関して以下のようなポリシーフラグというものを持っています。</p>



<h5 class="wp-block-heading jinr-heading d--bold">ポリシーフラグ</h5>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>フラグ</th><th>説明</th></tr></thead><tbody><tr><td>GrowFlag</td><td>必要に応じサイズのヒントを超えて大きくなる可能性がある。</td></tr><tr><td>ExpandFlag</td><td>ウィジェットは可能な限り広いスペースをとる。</td></tr><tr><td>ShrinkFlag</td><td>ウィジェットは必要に応じてサイズヒントよりも縮小できる。</td></tr><tr><td>IgnoreFlag</td><td>ウィジェットのサイズヒントは無視される。ウィジェットは可能な限り多くのスペースをとる。</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">また、サイズポリシーとしては以下のようなものがあり、上記のポリシーフラグの組み合わせで表現できます。</p>



<h5 class="wp-block-heading jinr-heading d--bold">サイズポリシー</h5>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>サイズポリシー</th><th>フラグの組み合わせ</th><th>説明</th></tr></thead><tbody><tr><td>Fixed</td><td>0</td><td>サイズヒントに固定する。</td></tr><tr><td>Minimum</td><td>GrowFlag</td><td>サイズヒントより小さくならない。ウィジェットは拡張可能。</td></tr><tr><td>Maximum</td><td>ShrinkFlag</td><td>サイズヒントより大きくならない。必要に応じて縮小可能。</td></tr><tr><td>Preferred</td><td>GrowFlag | ShrinkFlag</td><td>サイズヒントが適切だが、縮小・拡張できる。デフォルトのポリシー。</td></tr><tr><td>Expanding</td><td>GrowFlag | ShrinkFlag | ExpandingFlag</td><td>サイズヒントが適切なサイズだが、縮小・拡張はでき、可能な限り広いスペースをとる。</td></tr><tr><td>MinimumExpanding</td><td>GrowFlag | ExpandingFlag</td><td>サイズヒントより小さくならない。ウィジェットは拡張でき、可能な限り広いスペースをとる。</td></tr><tr><td>Ignore</td><td>ShrinkFlag | GrowFlag | IgnoreFlag</td><td>サイズヒントは無視される。ウィジェットは可能な限り多くのスペースを確保する。また必要に応じて縮小可能</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">例えばFixedというサイズポリシーを設定するとサイズヒントの画面サイズに固定がされるという感じです。バリエーションは色々あるので全て網羅はできませんが、以下でいくつか実際の設定例を見てみましょう。</p>



<h4 class="wp-block-heading jinr-heading d--bold">設定例１：幅はサイズヒントに固定、高さはデフォルト</h4>



<p class="wp-block-paragraph">幅はサイズヒントに固定(Fixed)、高さはデフォルト(Preferred)というようにしたい場合は、以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        print(textedit.sizeHint())

        # サイズヒントで固定
        textedit.setSizePolicy(
            qtw.QSizePolicy.Policy.Fixed, qtw.QSizePolicy.Policy.Preferred
        )</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
PyQt6.QtCore.QSize(256, 192)</pre>



<p class="wp-block-paragraph">サイズヒントをsizeHintメソッドで取得していますが、今回の例だとサイズヒントは(幅, 高さ)＝(256, 192)となっています。</p>



<p class="wp-block-paragraph">サイズポリシーを設定するには対象ウィジェットの<span class="marker"><strong>setSizePolicy</strong></span>でポリシーを指定します。ポリシーは、qtw.QSizePolicy.Policyの中に上記表に記載された値(Fixedなど）が定義されています。なお、幅(水平)方向のポリシーと高さ(垂直)方向のポリシーをそれぞれ指定する必要があります。</p>



<p class="wp-block-paragraph">上記例では、幅(水平)方向はFixed、高さ(垂直)方向はデフォルトのPreferredに設定しています。そのため、画面表示してみると幅についてはサイズヒントで返ってきた192ピクセルで固定されますが、高さについては、画面にあわせて拡大・縮小します。</p>



<h4 class="wp-block-heading jinr-heading d--bold">設定例２：可能な限り広いスペースを確保するがサイズヒントよりは小さくならない</h4>



<p class="wp-block-paragraph">次に、可能な限り広いスペースを確保するがサイズヒントよりは小さくならないようにしたい場合は、以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        print(textedit.sizeHint())

        # サイズヒントよりも小さくならないが拡張する
        textedit.setSizePolicy(
            qtw.QSizePolicy.Policy.MinimumExpanding,
            qtw.QSizePolicy.Policy.MinimumExpanding,
        )</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
PyQt6.QtCore.QSize(256, 192)</pre>



<p class="wp-block-paragraph">この例では、幅と高さ両方にMinimumExpandingのポリシーを設定しています。この場合は、画面を広げるとウィジェットも拡大しますが、小さくしようとしてもサイズヒントの(幅, 高さ)＝(256, 192)よりは小さくなりません。</p>



<h4 class="wp-block-heading jinr-heading d--bold">サイズヒントを上書きする方法</h4>



<p class="wp-block-paragraph">場合によってはサイズヒントをプログラム上で上書きしたくなるケースがあるかもしれません。その場合には、以下のように設定することも可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        # ウィジェットの用意
        textedit = qtw.QTextEdit(self)
        print(textedit.sizeHint())
        
        # サイズヒントを上書きする
        textedit.sizeHint = lambda: qtc.QSize(300, 300)
        print(textedit.sizeHint())</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
PyQt6.QtCore.QSize(256, 192)
PyQt6.QtCore.QSize(300, 300)</pre>



<p class="wp-block-paragraph">このようにサイズヒントを上書きした場合、setSizePolicyにより設定した場合には上書きされたサイズヒントに従います。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">PythonのGUIツールキットであるPyQtで画面要素である<span class="marker"><strong>ウィジェットのサイズを制御する方法</strong></span>について紹介しました。</p>



<p class="wp-block-paragraph">PyQtでは、固定サイズや最小・最大サイズを指定する基本的な方法の他にも、<span class="marker"><strong>サイズヒント(sizeHint)</strong></span>と<span class="marker"><strong>サイズポリシー(sizePolicy)</strong></span>という考え方があり、各ウィジェットに設定することで、サイズヒントをもとにそれぞれのポリシーに従ってウィジェットサイズが変わるように設定することができます。</p>



<p class="wp-block-paragraph">ポリシー設定は実際画面を動かしてみると思った通りに動かないというのが結構あるかと思います。自身の画面で色々と設定を変更しながら適切な挙動をするポリシーをうまく設定してもらうとよいのかなと思います。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/pyqt/widget-size" target="_blank" rel="noreferrer noopener">Github</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/pyqt-widget-size-control/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-06-22 07:51:38 by W3 Total Cache
-->