子クラスからタブ名を編集する

ブレイディ

タブにリストされているテキストを関数に変更させようとしていますが、タブを適切に参照する方法がわかりません。

以下のコードは機能しますが、1行がコメントアウトされているため、何も実行されません。問題はその行の「自己」にあることは知っていますが(行のコメントを外すとボタンがクリックされたときにエラーが発生します)、それを機能させるためにそこに何が必要かわかりません。私の問題は、タブが別のクラスによって作成されていることにあると推測していますが、(このコードのように)それぞれに同じウィジェットを持つ複数のタブを開くことができるようにしたいと思います。これを機能させるには、コードを再構築する必要がありますか?

from PyQt5.QtWidgets import (QMainWindow, QApplication, QAction, qApp,
    QPushButton, QWidget, QMenu, QVBoxLayout, QTabWidget, QLineEdit,
    QLabel, QHBoxLayout)
import sys

class MainWin(QMainWindow):

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

        self.initUI()

    def initUI(self):

        exitAct = QAction('&Exit', self)
        exitAct.triggered.connect(qApp.quit)

        newAct = QAction('&New Tab', self)
        newAct.triggered.connect(self.newTab)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')

        fileMenu.addAction(newAct)
        fileMenu.addAction(exitAct)

        self.layout = QVBoxLayout()

        self.tabbed = QTabWidget(self)
        self.layout.addWidget(self.tabbed)
        self.setCentralWidget(self.tabbed)

        self.show()

    def newTab(self):
        self.tab1 = tabbedFrame(self.tabbed)
        self.tabbed.addTab(self.tab1, self.tab1.tabName)


class tabbedFrame(QWidget):
    def __init__(self, parent):
        super(tabbedFrame, self).__init__(parent)
        layout = QVBoxLayout()
        self.updateButton = QPushButton("Update")
        self.updateButton.clicked.connect(self.updateTab)
        layout.addWidget(QLabel("Tab Name"))
        self.nameLineEdit = QLineEdit("New Tab")
        self.tabName = self.nameLineEdit.text()
        layout.addWidget(self.nameLineEdit)
        layout.addWidget(self.updateButton)
        self.setLayout(layout)

    def updateTab(self):
        tabindex = win.tabbed.currentIndex
        #win.tabbed.setTabText(self, tabindex, self.tabName)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWin()
    sys.exit(app.exec_())
eyllanesc

テキストを変更したいのですが、変数tabNameを使用していますが、その変数はの初期値を取りQLineEditます。更新しない場合は、テキストをどのように変更しますか?

1つの解決策は、更新する必要があり、クリックされた信号を介してクリックされた瞬間に放出される必要がある新しいタイトルを転送する信号を作成することです。

次に、新しい名前を確立するにsetTabText()は、タブのインデックスと新しい名前を渡す必要があるメソッドを使用する必要があります。このためfunctools.partial()に、接続で使用できます

import sys
from functools import partial
from PyQt5 import QtCore, QtWidgets


class MainWin(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        exitAct = QtWidgets.QAction('&Exit', self)
        exitAct.triggered.connect(QtWidgets.qApp.quit)
        newAct = QtWidgets.QAction('&New Tab', self)
        newAct.triggered.connect(self.newTab)
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')

        fileMenu.addAction(newAct)
        fileMenu.addAction(exitAct)
        self.tabbed = QtWidgets.QTabWidget()
        self.setCentralWidget(self.tabbed)

        self.show()

    def newTab(self):
        tab = TabbedFrame()
        ix = self.tabbed.addTab(tab, "")
        tab.nameTabChanged.connect(partial(self.tabbed.setTabText, ix))
        tab.updateTab()


class TabbedFrame(QtWidgets.QWidget):
    nameTabChanged = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(TabbedFrame, self).__init__(parent)

        updateButton = QtWidgets.QPushButton("Update")
        updateButton.clicked.connect(self.updateTab)
        self.nameLineEdit = QtWidgets.QLineEdit("New Tab")

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(QtWidgets.QLabel("Tab Name"))
        layout.addWidget(self.nameLineEdit)
        layout.addWidget(updateButton)
        layout.addStretch()

    def updateTab(self):
        new_name = self.nameLineEdit.text()
        self.nameTabChanged.emit(new_name)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    win = MainWin()
    sys.exit(app.exec_())

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

子フォームから親クラスを編集する

分類Dev

プルからライブラリを更新するためにカスタムxmlを編集する方法は?

分類Dev

子クラスから抽象クラス名を取得する方法

分類Dev

Grafanaからのスラック通知のリンクを編集する方法

分類Dev

Grafanaからのスラック通知のリンクを編集する方法

分類Dev

親クラスから継承された変数を編集する

分類Dev

ブラウザからPloneでbuildout.cfgを編集する

分類Dev

親から子クラス名を取得する

分類Dev

親から子供のクラス名を取得する

分類Dev

編集ボックスからテキストを取得する

分類Dev

gitで非マスターブランチを編集する

分類Dev

リストのリストからデータフレームの行名を編集する方法は?

分類Dev

w3school からスライダーを編集する

分類Dev

PHP親クラスの違いから子クラス名を取得する

分類Dev

HPCクラスターから完全なジョブ名を取得する方法

分類Dev

MPIクラスターの/ etc / hostsを編集する

分類Dev

オブジェクトからクラス名を取得する

分類Dev

データベースからページチェックボックスの値を編集する

分類Dev

クラス関数から環境オブジェクトを編集する方法を教えてください。

分類Dev

ブラウザでsvg:imageスタイルを編集することは可能ですか?(D3を使用)

分類Dev

クラスとIDによるタグからのJavaScript編集InnerHTML

分類Dev

CSSでクラスの個々のインスタンスを編集する方法はありますか?

分類Dev

Android-テキストの編集からラジオボタンにテキストを取得する方法は?

分類Dev

phpを使用してmysqlテーブルからデータを編集する

分類Dev

sh:PWDをインタラクティブに編集するコマンドはありますか?

分類Dev

GitHub のデバッグ ブランチから Ruby gem をインストールして編集する方法

分類Dev

別のクラスからTextViewを編集するときに強制的に閉じる

分類Dev

スクリプトからUnityEditorのプレハブでMonoBehaviourのプロパティを編集する方法

分類Dev

ブートストラップスタイルを編集するには?

Related 関連記事

  1. 1

    子フォームから親クラスを編集する

  2. 2

    プルからライブラリを更新するためにカスタムxmlを編集する方法は?

  3. 3

    子クラスから抽象クラス名を取得する方法

  4. 4

    Grafanaからのスラック通知のリンクを編集する方法

  5. 5

    Grafanaからのスラック通知のリンクを編集する方法

  6. 6

    親クラスから継承された変数を編集する

  7. 7

    ブラウザからPloneでbuildout.cfgを編集する

  8. 8

    親から子クラス名を取得する

  9. 9

    親から子供のクラス名を取得する

  10. 10

    編集ボックスからテキストを取得する

  11. 11

    gitで非マスターブランチを編集する

  12. 12

    リストのリストからデータフレームの行名を編集する方法は?

  13. 13

    w3school からスライダーを編集する

  14. 14

    PHP親クラスの違いから子クラス名を取得する

  15. 15

    HPCクラスターから完全なジョブ名を取得する方法

  16. 16

    MPIクラスターの/ etc / hostsを編集する

  17. 17

    オブジェクトからクラス名を取得する

  18. 18

    データベースからページチェックボックスの値を編集する

  19. 19

    クラス関数から環境オブジェクトを編集する方法を教えてください。

  20. 20

    ブラウザでsvg:imageスタイルを編集することは可能ですか?(D3を使用)

  21. 21

    クラスとIDによるタグからのJavaScript編集InnerHTML

  22. 22

    CSSでクラスの個々のインスタンスを編集する方法はありますか?

  23. 23

    Android-テキストの編集からラジオボタンにテキストを取得する方法は?

  24. 24

    phpを使用してmysqlテーブルからデータを編集する

  25. 25

    sh:PWDをインタラクティブに編集するコマンドはありますか?

  26. 26

    GitHub のデバッグ ブランチから Ruby gem をインストールして編集する方法

  27. 27

    別のクラスからTextViewを編集するときに強制的に閉じる

  28. 28

    スクリプトからUnityEditorのプレハブでMonoBehaviourのプロパティを編集する方法

  29. 29

    ブートストラップスタイルを編集するには?

ホットタグ

アーカイブ