<?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>「オーバーロード」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%89/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sun, 11 Jan 2026 05:12:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「オーバーロード」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【PyQt】カスタムsignalとslotの作成方法</title>
		<link>https://tech.nkhn37.net/pyqt-signal-slot-custom/</link>
					<comments>https://tech.nkhn37.net/pyqt-signal-slot-custom/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sat, 10 Dec 2022 21:00:00 +0000</pubDate>
				<category><![CDATA[PyQt]]></category>
		<category><![CDATA[signal]]></category>
		<category><![CDATA[slot]]></category>
		<category><![CDATA[オーバーロード]]></category>
		<category><![CDATA[カスタム]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=6338</guid>

					<description><![CDATA[PythonのGUIツールキットであるPyQtでイベントを処理するための仕組みであるsignalとslotにおいて、カスタムのsignalとslotを作成する方法について解説します。また、signalとslotのオーバー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PythonのGUIツールキットであるPyQtでイベントを処理するための仕組みであるsignalとslotにおいて、<span class="marker"><strong>カスタムのsignalとslotを作成する方法</strong></span>について解説します。また、signalとslotのオーバーロードについても説明します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">PyQtにおけるsignalとslot</h2>



<p>PyQtでは、画面操作のイベント処理にsignalとslotという概念を使用します。signalとslotの基本が分からない人は「<a href="https://tech.nkhn37.net/pyqt-signal-slot-basics/" target="_blank" rel="noreferrer noopener">signalとslotの基本</a>」でまとめていますので興味があれば参考にしてください。</p>



<p>signalとslotは、任意の二つのPyQtオブジェクトが疎結合のまま連携できるような仕組みとなっていて、開発者が任意のカスタムsignalやslotを開発していくことができます。</p>



<p>本記事では、<span class="marker"><strong>カスタムsignalとslotを作成する方法</strong></span>について紹介していきます。</p>



<h2 class="wp-block-heading jinr-heading d--bold">カスタムsignalとslotの作成方法</h2>



<h3 class="wp-block-heading jinr-heading d--bold">開発画面の概要</h3>



<p>カスタムsignalとslotの作成方法について、以下のように2つの画面間でデータを連携して動作するプログラム例で考えていきましょう。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="1025" height="923" src="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-17.png" alt="PyQt カスタムsignalとslot" class="wp-image-6337" srcset="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-17.png 1025w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-17-300x270.png 300w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-17-768x692.png 768w" sizes="(max-width: 1025px) 100vw, 1025px" /></figure>
</div>


<p>操作の手順は以下のような形です。</p>



<ol class="wp-block-list jinr-list">
<li>親画面で「変更」ボタンをクリックする。</li>



<li>別フォームで文字列の入力画面が表示されるので、任意の文字列を入力して「登録」ボタンをクリックする。</li>



<li>別フォームは閉じて、親画面の文字列が別フォームで入力された文字列で変換される。</li>
</ol>



<p>上記のような手続きを実施する場合には、親画面と別フォーム画面でデータを共有する必要があります。この時にカスタムのsignalやslotを用意すると柔軟な対応ができます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">プログラム実装例</h3>



<p>上記で説明した画面を実現するプログラム実装例について紹介し、内容を説明していきます。</p>



<p>なお、以降のプログラムにおいて画面全体のプログラム構造は「<a rel="noreferrer noopener" href="https://tech.nkhn37.net/pyqt-qwidget-program-template/" target="_blank">QWidgetを継承した画面開発のテンプレート</a>」をベースにしていますので参考にしてください。全体のプログラム構造の説明は省略し、カスタムsignalとslotのプログラム部分を中心に説明をしていきます。</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 FormWindow(qtw.QWidget):
    """フォームウィンドウ"""

    # strのシグナルを定義
    submitted = qtc.pyqtSignal(str)

    def __init__(self):
        """コンストラクタ"""
        super().__init__()
        # 画面タイトルの設定
        self.setWindowTitle("フォーム")
        # レイアウトの設定
        layout = qtw.QHBoxLayout()
        self.setLayout(layout)

        # ウィジェットの生成
        self.line_edit = qtw.QLineEdit()
        self.submit_button = qtw.QPushButton("登録", clicked=self.on_submit)

        # レイアウト配置
        layout.addWidget(self.line_edit)
        layout.addWidget(self.submit_button)

    def on_submit(self):
        """登録ボタン用スロット"""
        # ボタン押下時にline_editに入力された値を送信
        self.submitted.emit(self.line_edit.text())
        # フォームウィンドウを閉じる
        self.close()


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

    def __init__(self):
        super().__init__()
        # 画面タイトルの設定
        self.setWindowTitle("カスタムスロットの作成")
        # 画面サイズの設定
        self.resize(320, 100)

        # メインレイアウトの設定
        main_layout = qtw.QVBoxLayout()
        self.setLayout(main_layout)

        # ウィジェットの生成
        self.label = qtw.QLabel("文字列表示欄")
        self.change_button = qtw.QPushButton("変更")
        self.change_button.clicked.connect(self.on_change)

        # レイアウト配置
        main_layout.addWidget(self.label)
        main_layout.addWidget(self.change_button)
        main_layout.addStretch()

        # 画面表示
        self.show()

    def on_change(self):
        """フォーム呼び出し用スロット"""
        # フォームウィンドウをインスタンス化
        self.form_window = FormWindow()
        # フォームウィンドウのシグナルをラベルのsetTextに接続
        self.form_window.submitted.connect(self.label.setText)
        # フォームウィンドウを表示
        self.form_window.show()


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


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



<p>以降ではプログラムのポイントについて説明していきます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">フォームウィンドウの実装</h4>



<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="">class FormWindow(qtw.QWidget):
    """フォームウィンドウ"""

    # strのシグナルを定義
    submitted = qtc.pyqtSignal(str)</pre>



<p>FormWindowクラスは、MainWindowから呼び出される別のフォームウィンドウです。</p>



<p>このフォームウィンドウの上記部分ではカスタムsignalとしてsubmittedを定義しています。signalはpyqtSignalを使用して生成でき、引数には発する型を指定します。上記の例では、strを発するシグナルを用意しているということになります。</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="">    def __init__(self):
        """コンストラクタ"""
        # ===== 省略

        # ウィジェットの生成
        self.line_edit = qtw.QLineEdit()
        self.submit_button = qtw.QPushButton("登録", clicked=self.on_submit)

        # ===== 省略</pre>



<p>コンストラクタでは、QLineEditで入力欄(line_edit)を用意し、QPushButtonで登録用ボタン(submit_button)を用意しています。このボタンがクリックされたときのclicked signalに対するslotとして接続しているのがon_submitメソッドです。</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="">    def on_submit(self):
        """登録ボタン用スロット"""
        # ボタン押下時にline_editに入力された値を送信
        self.submitted.emit(self.line_edit.text())
        # フォームウィンドウを閉じる
        self.close()</pre>



<p>on_submit内では、以下のようなことを実行しています。</p>



<ol class="wp-block-list jinr-list">
<li>submitted.emitでline_editに入力された値を送信</li>



<li>フォームウィンドウを閉じる(self.close())</li>
</ol>



<p>このように、カスタムsignalとして用意しておいたsubmitted.emitを使うことでsignalを発するようになります。</p>



<h4 class="wp-block-heading jinr-heading d--bold">メインウィンドウの実装</h4>



<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="">class MainWindow(qtw.QWidget):
    """メインウィンドウ"""

    def __init__(self):
        super().__init__()
        # ===== 省略

        # ウィジェットの生成
        self.label = qtw.QLabel("文字列表示欄")
        self.change_button = qtw.QPushButton("変更")
        self.change_button.clicked.connect(self.on_change)

        # ===== 省略
        # 画面表示
        self.show()</pre>



<p>メインウィンドウでは、文字列を表示するラベル(label)と、変更ボタン(change_button)を用意しています。そして、change_buttonがクリックされるとslotであるon_changeメソッドに接続されます。</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="">    def on_change(self):
        """フォーム呼び出し用スロット"""
        # フォームウィンドウをインスタンス化
        self.form_window = FormWindow()
        # フォームウィンドウのシグナルをラベルのsetTextに接続
        self.form_window.submitted.connect(self.label.setText)
        # フォームウィンドウを表示
        self.form_window.show()</pre>



<p>on_changeメソッドでは以下のようなことを実装しています。</p>



<ol class="wp-block-list jinr-list">
<li>フォームウィンドウをインスタンス化する。</li>



<li>フォームウィンドウのsubmitted signalをラベルのsetTextに接続する。</li>



<li>フォームウィンドウを表示する。</li>
</ol>



<p>まず、メインウィンドウ側からフォームウィンドウをインスタンス化して表示してあげます。そして、上記で説明したFormWindowの変更文字列を返すsubmitted signalというカスタムsignalを、メインウィンドウのラベル文字列を変更するlabel.setTextへconnectで接続します。</p>



<p>submitted signalは、フォームで入力した文字列のstrをシグナルとして渡すように作られているので、フォームに入力した文字列がlabel.setTextの引数として渡されることでメインウィンドウの文字列が変更されるわけです。</p>



<p>このようにカスタムsignalを作った連携することが可能になります。</p>



<h2 class="wp-block-heading jinr-heading d--bold">signalとslotのオーバーロード</h2>



<p>上記で紹介してきたように、カスタムのsignalとslotが作成できるということがお分かりいただけたかと思います。なお、signalとslotをオーバーロードすることも可能になっています。本以降では、<span class="marker"><strong>signalとslotのオーバーロード</strong></span>の例について紹介していきます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p><strong>オーバーロードとオーバーライドの違い</strong></p>



<p>オーバーロードは、引数の異なる関数（メソッド）を複数定義することです。一方で、オーバーライドは、親クラスのメソッドを子クラスで再定義して上書きすることを言います。</p>
</div>
		</div></section>



<h3 class="wp-block-heading jinr-heading d--bold">プログラム実装例</h3>



<p>カスタムsignalとslotの実装で使用したメインウィンドウとフォームウィンドウの実装において、フォームウィンドウで「文字列が入力された」場合と「数値が入力された」場合でsignalとslotの挙動を変えるような例について見てみましょう。</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 FormWindow(qtw.QWidget):
    """フォームウィンドウ"""

    # シグナルを定義(オーバーロード)
    submitted = qtc.pyqtSignal([str], [int, str])

    def __init__(self):
        """コンストラクタ"""
        super().__init__()
        # 画面タイトルの設定
        self.setWindowTitle("フォーム")
        # レイアウトの設定
        layout = qtw.QHBoxLayout()
        self.setLayout(layout)

        # ウィジェットの生成
        self.line_edit = qtw.QLineEdit()
        self.submit_button = qtw.QPushButton("登録", clicked=self.on_submit)

        # レイアウト配置
        layout.addWidget(self.line_edit)
        layout.addWidget(self.submit_button)

    def on_submit(self):
        """登録ボタン用スロット"""
        text = self.line_edit.text()
        if text.isdigit():
            # 数値の場合は数値と文字列を返却する
            self.submitted[int, str].emit(int(text), text)
        else:
            # その他の場合は文字列のみ返却する
            self.submitted[str].emit(text)

        # フォームウィンドウを閉じる
        self.close()


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

    def __init__(self):
        super().__init__()
        # 画面タイトルの設定
        self.setWindowTitle("カスタムスロットの作成")
        # 画面サイズの設定
        self.resize(320, 100)

        # メインレイアウトの設定
        main_layout = qtw.QVBoxLayout()
        self.setLayout(main_layout)

        # ウィジェットの生成
        self.label = qtw.QLabel("文字列表示欄")
        self.change_button = qtw.QPushButton("変更")
        self.change_button.clicked.connect(self.on_change)

        # レイアウト配置
        main_layout.addWidget(self.label)
        main_layout.addWidget(self.change_button)
        main_layout.addStretch()

        # 画面表示
        self.show()

    def on_change(self):
        """フォーム呼び出し用スロット"""
        # フォームウィンドウをインスタンス化
        self.form_window = FormWindow()
        # フォームウィンドウのシグナルをラベルのsetTextに接続
        self.form_window.submitted[str].connect(self.on_submitted_str)
        self.form_window.submitted[int, str].connect(self.on_submitted_int_and_str)
        # フォームウィンドウを表示
        self.form_window.show()

    def on_submitted_str(self, text):
        """slot (strのsignal用)

        Args:
            text: 文字列
        """
        self.label.setText(text)

    def on_submitted_int_and_str(self, value, text):
        """slot (intとstrのsignal用)

        Args:
            value: 数値
            text: 文字列
        """
        disp_text = f"value:{value}, text:{text}"
        self.label.setText(disp_text)


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


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



<p>フォームウィンドウで文字列が入力された場合の実行結果</p>



<div class="wp-block-columns js--scr-animation is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="238" height="78" src="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-21.png" alt="signalとslotのオーバーロード" class="wp-image-6367"/></figure>
</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="322" height="132" src="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-22.png" alt="signalとslotのオーバーロード" class="wp-image-6368" srcset="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-22.png 322w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-22-300x123.png 300w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-22-320x132.png 320w" sizes="(max-width: 322px) 100vw, 322px" /></figure>
</div>
</div>



<p>フォームウィンドウで数値が入力された場合の実行結果</p>



<div class="wp-block-columns js--scr-animation is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="238" height="78" src="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-19.png" alt="signalとslotのオーバーロード" class="wp-image-6365"/></figure>
</div></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="322" height="132" src="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-20.png" alt="signalとslotのオーバーロード" class="wp-image-6366" srcset="https://tech.nkhn37.net/wp-content/uploads/2022/12/image-20.png 322w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-20-300x123.png 300w, https://tech.nkhn37.net/wp-content/uploads/2022/12/image-20-320x132.png 320w" sizes="(max-width: 322px) 100vw, 322px" /></figure>
</div></div>
</div>



<p>以降でポイントを中心に説明していきます。</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="">class FormWindow(qtw.QWidget):
    """フォームウィンドウ"""

    # シグナルを定義(オーバーロード)
    submitted = qtc.pyqtSignal([str], [int, str])</pre>



<p>まず、シグナルを定義する際に上記のようにすることで[str]のみを送信するシグナルと[int, str]を送信シグナルを用意します。</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="">    def on_submit(self):
        """登録ボタン用スロット"""
        text = self.line_edit.text()
        if text.isdigit():
            # 数値の場合は数値と文字列を返却する
            self.submitted[int, str].emit(int(text), text)
        else:
            # その他の場合は文字列のみ返却する
            self.submitted[str].emit(text)

        # フォームウィンドウを閉じる
        self.close()</pre>



<p>signalの内容を定義している部分では、上記のように入力された値によって返却する内容を変更しています。入力文字が数値(isdgit()==True)の場合は、数値と文字列を送信(emit)しています。一方で数値でない文字列の場合は、textのみを送信(emit)しています。</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="">    def on_change(self):
        """フォーム呼び出し用スロット"""
        # フォームウィンドウをインスタンス化
        self.form_window = FormWindow()
        # フォームウィンドウのシグナルをラベルのsetTextに接続
        self.form_window.submitted[str].connect(self.on_submitted_str)
        self.form_window.submitted[int, str].connect(self.on_submitted_int_and_str)
        # フォームウィンドウを表示
        self.form_window.show()</pre>



<p>次にメインウィンドウのslotのon_changeについてです。こちらではsubmitted[str]のsignalの場合と、submitted[int, str]のsignalとで接続するメソッドを変更しています。</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="">    def on_submitted_str(self, text):
        """slot (strのsignal用)

        Args:
            text: 文字列
        """
        self.label.setText(text)

    def on_submitted_int_and_str(self, value, text):
        """slot (intとstrのsignal用)

        Args:
            value: 数値
            text: 文字列
        """
        disp_text = f"value:{value}, text:{text}"
        self.label.setText(disp_text)</pre>



<p>上記がslotメソッドの部分です。[str]signal用のslotと[int, str]signal用のslotとしてそれぞれのメソッドを用意しています。</p>



<p>strのみの場合はそのままラベルに設定し、int, strが来る場合は少し加工した文字列にしてラベルを設定しています。このようにsignalとslotでオーバーロードすることもできるようになっています。</p>



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



<p>PythonのGUIツールキットであるPyQtでイベントを処理するための仕組みであるsignalとslotにおいて、<span class="marker"><strong>カスタムのsignalとslotを作成する方法</strong></span>について解説しました。また、signalとslotのオーバーロードについても説明しています。</p>



<p>カスタムのsignalとslotについて理解できると実装の幅が広がりますので、是非色々と試して使ってみてもらえるとよいかと思います。</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>上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/pyqt/signal-slot-custom" 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-signal-slot-custom/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-05-08 01:44:11 by W3 Total Cache
-->