teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2018/08/19 08:09

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  def quit(self):
60
60
  # 項目を引き継ぎたい時とか Sqlite3でも可能
61
- self.master.piyo_piyo("aaa")
61
+ self.master.piyo_piyo("piyo_piyo")
62
62
  self.master.setCurrentIndex(0)
63
63
 
64
64
 
@@ -77,7 +77,7 @@
77
77
  # タブパネルのボーダーを削除
78
78
  self.setStyleSheet("QTabWidget::pane { border: 0; }")
79
79
  # タブバーを非表示に(↓をコメントすると動きがわかりやすくなるかも)
80
- #self.tabBar().hide()
80
+ self.tabBar().hide()
81
81
  self.resize(500, 300)
82
82
  self.move(100, 0)
83
83
 

2

追記

2018/08/19 08:09

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  class StartMenu(QWidget):
32
32
  def __init__(self, parent):
33
33
  super().__init__(parent)
34
- self.parent()
34
+ self.master = parent
35
35
  self.button1 = QPushButton('Welcome', self)
36
36
  self.button1.move(230, 120)
37
37
  self.button1.clicked.connect(self.welcome)
@@ -41,12 +41,14 @@
41
41
 
42
42
  def welcome(self):
43
43
  # 0オリジン
44
- self.parent().setCurrentIndex(1)
44
+ self.master.setCurrentIndex(1)
45
45
 
46
46
 
47
47
  class WelcomeMenu(QWidget):
48
+
48
49
  def __init__(self, parent):
49
50
  super().__init__(parent)
51
+ self.master = parent
50
52
  self.button2 = QPushButton('Hello', self)
51
53
  self.button2.move(230, 120)
52
54
 
@@ -55,7 +57,9 @@
55
57
  self.quitbutton2.clicked.connect(self.quit)
56
58
 
57
59
  def quit(self):
60
+ # 項目を引き継ぎたい時とか Sqlite3でも可能
61
+ self.master.piyo_piyo("aaa")
58
- self.parent().setCurrentIndex(0)
62
+ self.master.setCurrentIndex(0)
59
63
 
60
64
 
61
65
  class App(QTabWidget):
@@ -66,18 +70,21 @@
66
70
  self.tab1 = StartMenu(self)
67
71
  self.tab2 = WelcomeMenu(self)
68
72
 
69
- # タブページにメニューを追加
73
+ # タブページに追加
70
74
  self.addTab(self.tab1, "StartMenu")
71
75
  self.addTab(self.tab2, "WelcomeMenu")
72
76
 
73
77
  # タブパネルのボーダーを削除
74
78
  self.setStyleSheet("QTabWidget::pane { border: 0; }")
75
79
  # タブバーを非表示に(↓をコメントすると動きがわかりやすくなるかも)
76
- self.tabBar().hide()
80
+ #self.tabBar().hide()
77
81
  self.resize(500, 300)
78
82
  self.move(100, 0)
79
83
 
84
+ def piyo_piyo(self, text):
85
+ print(text)
80
86
 
87
+
81
88
  def main():
82
89
  app = QApplication(sys.argv)
83
90
  ex1 = App()

1

追記

2018/08/19 08:08

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -7,18 +7,20 @@
7
7
 
8
8
  この2行を入れれば表示されるようになります。
9
9
 
10
- ここからは提案というか一般的な画面があるアプリケーションの話です。
10
+ ---
11
- 質問文のコードと回答文の書き方だと画面の項目が増えた時(大体20項目ぐらい)に全項目の表示/非表示を意識しないといけなくなるので管理しきれなくなります。
12
11
 
12
+ ここからは提案です。
13
+ 質問文のコードと回答文の書き方だと画面の項目が増えた時(大体20項目ぐらいでしょうか)に全項目の表示/非表示の状態をプログラマが意識しないといけないので管理しきれなくなります。
14
+
13
15
  一般的なGUIアプリケーションはフレーム(Frame)やウィンドウ(Window)という概念があります。
14
- アプリの中に親画面があり、小画面の中にウィンドウがあり、ウィンドウを表示
16
+ アプリの中にウィンドウがあり、その中に子ウィンドウがある
15
17
 
16
18
  ![イメージ説明](131f5c90e31c467692d13f31b0678f5d.png)
17
19
 
18
- 今回の場合は`QTabWidget`を使った画面の切り替えサンプルコードを参考資料として投稿しておきます。
20
+ 今回の場合は`QTabWidget`を使った、メニュー画面の切り替えサンプルコードを参考資料として投稿します。
19
- 画面の項目に対して、hideしていないので、質問文のようなトラブルが原理上発生しえません。
21
+ 画面の項目に対する`hide`処理が存在しないので、質問文のようなトラブルが原理上発生しえません。
20
- ご参考まで
21
22
 
23
+
22
24
  ```Python
23
25
  # -*- coding: utf-8 -*-
24
26
  import sys
@@ -60,16 +62,17 @@
60
62
  def __init__(self):
61
63
  super().__init__()
62
64
  self.setWindowTitle("Hello")
65
+ # 1個1個のタブがメニューに対応
63
66
  self.tab1 = StartMenu(self)
64
67
  self.tab2 = WelcomeMenu(self)
65
68
 
66
- # Add tabs
69
+ # タブページにメニューを追加
67
- self.addTab(self.tab1, "")
70
+ self.addTab(self.tab1, "StartMenu")
68
- self.addTab(self.tab2, "")
71
+ self.addTab(self.tab2, "WelcomeMenu")
69
72
 
70
73
  # タブパネルのボーダーを削除
71
74
  self.setStyleSheet("QTabWidget::pane { border: 0; }")
72
- # タブバーを非表示に
75
+ # タブバーを非表示に(↓をコメントすると動きがわかりやすくなるかも)
73
76
  self.tabBar().hide()
74
77
  self.resize(500, 300)
75
78
  self.move(100, 0)