回答編集履歴
4
コメントを追加とroot.update_idletasks()を呼び出して、width とheight を取得できるように変更!
test
CHANGED
@@ -44,11 +44,15 @@
|
|
44
44
|
|
45
45
|
import tkinter.ttk as ttk
|
46
46
|
|
47
|
+
|
48
|
+
|
47
49
|
from selenium import webdriver
|
48
50
|
|
49
51
|
|
50
52
|
|
51
53
|
|
54
|
+
|
55
|
+
# メソッド名:task_runはあまり適切ではないかも!
|
52
56
|
|
53
57
|
def task_run(url):
|
54
58
|
|
@@ -72,7 +76,7 @@
|
|
72
76
|
|
73
77
|
self.style = ttk.Style()
|
74
78
|
|
75
|
-
# tabメニューのpadding設定
|
79
|
+
# tabメニューのpaddingを設定
|
76
80
|
|
77
81
|
self.style.configure('TNotebook.Tab', padding=(10, 0, 10, 0))
|
78
82
|
|
@@ -84,11 +88,17 @@
|
|
84
88
|
|
85
89
|
def create_widgets(self):
|
86
90
|
|
87
|
-
|
91
|
+
# rootコンポーネントのwidthとheigthを取得
|
88
92
|
|
89
|
-
|
93
|
+
width = self.master.winfo_width()
|
90
94
|
|
95
|
+
height = self.master.winfo_height()
|
96
|
+
|
97
|
+
self.tab_pages['tab_a'] = Frame(self, width=width, height=height)
|
98
|
+
|
99
|
+
button_yahoo = Button(self.tab_pages['tab_a'],
|
100
|
+
|
91
|
-
command=functools.partial(
|
101
|
+
command=functools.partial(Notebook.browser_open, 'https://www.yahoo.co.jp/'),
|
92
102
|
|
93
103
|
text='yahoo')
|
94
104
|
|
@@ -96,29 +106,33 @@
|
|
96
106
|
|
97
107
|
|
98
108
|
|
99
|
-
self.tab_pages['b'] = Frame(self, width=
|
109
|
+
self.tab_pages['tab_b'] = Frame(self, width=width, height=height)
|
100
110
|
|
101
|
-
button_google = Button(self.tab_pages['b'],
|
111
|
+
button_google = Button(self.tab_pages['tab_b'],
|
102
112
|
|
103
|
-
command=functools.partial(
|
113
|
+
command=functools.partial(Notebook.browser_open, 'https://www.google.co.jp/'),
|
104
114
|
|
105
115
|
text='google')
|
106
116
|
|
107
117
|
button_google.pack()
|
108
118
|
|
109
|
-
for
|
119
|
+
for key, val in self.tab_pages.items():
|
110
120
|
|
111
|
-
v.pack()
|
121
|
+
val.pack()
|
112
122
|
|
123
|
+
# 登録されるtab名称(text)はOrderedDictのkey名
|
124
|
+
|
113
|
-
self.add(v, text=
|
125
|
+
self.add(val, text=key)
|
114
126
|
|
115
127
|
self.pack(expand=True, fill=BOTH)
|
116
128
|
|
117
129
|
|
118
130
|
|
119
|
-
|
131
|
+
@staticmethod
|
120
132
|
|
133
|
+
def browser_open(url):
|
134
|
+
|
121
|
-
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを
|
135
|
+
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを防ぐために別スレッドを生成する。
|
122
136
|
|
123
137
|
thr = threading.Thread(target=task_run, args=(url,))
|
124
138
|
|
@@ -136,6 +150,8 @@
|
|
136
150
|
|
137
151
|
root.geometry("400x300")
|
138
152
|
|
153
|
+
root.update_idletasks()
|
154
|
+
|
139
155
|
notebook = Notebook(root)
|
140
156
|
|
141
157
|
root.mainloop()
|
@@ -147,6 +163,8 @@
|
|
147
163
|
if __name__ == '__main__':
|
148
164
|
|
149
165
|
main()
|
166
|
+
|
167
|
+
|
150
168
|
|
151
169
|
|
152
170
|
|
3
コメントでスレッドを生成する理由を明示
test
CHANGED
@@ -118,6 +118,8 @@
|
|
118
118
|
|
119
119
|
def browser_open(self, url):
|
120
120
|
|
121
|
+
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを回避するために別スレッドを生成する。
|
122
|
+
|
121
123
|
thr = threading.Thread(target=task_run, args=(url,))
|
122
124
|
|
123
125
|
thr.start()
|
2
どうして質問の問題が起きるのかの解説文を追加
test
CHANGED
File without changes
|
1
どうして質問の問題が起きるのかの解説文を追加
test
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
> しかし、今はボタンが次々に増えてしまいます。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
■原因
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
> def mrnu1_callback():
|
10
|
+
|
11
|
+
button0 = Button(root, text = 'A',command=btn0_callback)
|
12
|
+
|
13
|
+
button0.pack()
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
メニューをクリックした時にmrnu1_callbackを呼び出していますが、毎回Button()のコンストラクタをよんでいます。その為新しいインスタンスが生成されpackで追加されます。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
■本題
|
22
|
+
|
1
23
|
TkinterのNotebookウィジットを使ったサンプルです。
|
2
24
|
|
3
25
|
質問者様が求めているのはこういうコードでしょうか?
|