回答編集履歴
4
コメントを追加とroot.update_idletasks()を呼び出して、width とheight を取得できるように変更!
answer
CHANGED
@@ -21,9 +21,11 @@
|
|
21
21
|
import functools
|
22
22
|
from tkinter import *
|
23
23
|
import tkinter.ttk as ttk
|
24
|
+
|
24
25
|
from selenium import webdriver
|
25
26
|
|
26
27
|
|
28
|
+
# メソッド名:task_runはあまり適切ではないかも!
|
27
29
|
def task_run(url):
|
28
30
|
# webdriverをcloseしていないので、リソースリークに注意
|
29
31
|
#driver = webdriver.Chrome(r'C:\selenium\chromedriver')
|
@@ -35,30 +37,35 @@
|
|
35
37
|
def __init__(self, master=None, **kw):
|
36
38
|
super().__init__(master, **kw)
|
37
39
|
self.style = ttk.Style()
|
38
|
-
# tabメニューのpadding設定
|
40
|
+
# tabメニューのpaddingを設定
|
39
41
|
self.style.configure('TNotebook.Tab', padding=(10, 0, 10, 0))
|
40
42
|
self.tab_pages = OrderedDict()
|
41
43
|
self.create_widgets()
|
42
44
|
|
43
45
|
def create_widgets(self):
|
46
|
+
# rootコンポーネントのwidthとheigthを取得
|
47
|
+
width = self.master.winfo_width()
|
48
|
+
height = self.master.winfo_height()
|
44
|
-
self.tab_pages['
|
49
|
+
self.tab_pages['tab_a'] = Frame(self, width=width, height=height)
|
45
|
-
button_yahoo = Button(self.tab_pages['
|
50
|
+
button_yahoo = Button(self.tab_pages['tab_a'],
|
46
|
-
command=functools.partial(
|
51
|
+
command=functools.partial(Notebook.browser_open, 'https://www.yahoo.co.jp/'),
|
47
52
|
text='yahoo')
|
48
53
|
button_yahoo.pack()
|
49
54
|
|
50
|
-
self.tab_pages['
|
55
|
+
self.tab_pages['tab_b'] = Frame(self, width=width, height=height)
|
51
|
-
button_google = Button(self.tab_pages['
|
56
|
+
button_google = Button(self.tab_pages['tab_b'],
|
52
|
-
command=functools.partial(
|
57
|
+
command=functools.partial(Notebook.browser_open, 'https://www.google.co.jp/'),
|
53
58
|
text='google')
|
54
59
|
button_google.pack()
|
55
|
-
for
|
60
|
+
for key, val in self.tab_pages.items():
|
56
|
-
|
61
|
+
val.pack()
|
62
|
+
# 登録されるtab名称(text)はOrderedDictのkey名
|
57
|
-
self.add(
|
63
|
+
self.add(val, text=key)
|
58
64
|
self.pack(expand=True, fill=BOTH)
|
59
65
|
|
66
|
+
@staticmethod
|
60
|
-
def browser_open(
|
67
|
+
def browser_open(url):
|
61
|
-
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを
|
68
|
+
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを防ぐために別スレッドを生成する。
|
62
69
|
thr = threading.Thread(target=task_run, args=(url,))
|
63
70
|
thr.start()
|
64
71
|
|
@@ -67,6 +74,7 @@
|
|
67
74
|
root = Tk()
|
68
75
|
root.title(u"Software Title")
|
69
76
|
root.geometry("400x300")
|
77
|
+
root.update_idletasks()
|
70
78
|
notebook = Notebook(root)
|
71
79
|
root.mainloop()
|
72
80
|
|
@@ -74,6 +82,7 @@
|
|
74
82
|
if __name__ == '__main__':
|
75
83
|
main()
|
76
84
|
|
85
|
+
|
77
86
|
```
|
78
87
|
|
79
88
|
|
3
コメントでスレッドを生成する理由を明示
answer
CHANGED
@@ -58,6 +58,7 @@
|
|
58
58
|
self.pack(expand=True, fill=BOTH)
|
59
59
|
|
60
60
|
def browser_open(self, url):
|
61
|
+
# webdriverの生成に時間がかかり、イベントディスパッチスレッドがブロックするのを回避するために別スレッドを生成する。
|
61
62
|
thr = threading.Thread(target=task_run, args=(url,))
|
62
63
|
thr.start()
|
63
64
|
|
2
どうして質問の問題が起きるのかの解説文を追加
answer
CHANGED
File without changes
|
1
どうして質問の問題が起きるのかの解説文を追加
answer
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
> しかし、今はボタンが次々に増えてしまいます。
|
2
|
+
|
3
|
+
■原因
|
4
|
+
|
5
|
+
> def mrnu1_callback():
|
6
|
+
button0 = Button(root, text = 'A',command=btn0_callback)
|
7
|
+
button0.pack()
|
8
|
+
|
9
|
+
メニューをクリックした時にmrnu1_callbackを呼び出していますが、毎回Button()のコンストラクタをよんでいます。その為新しいインスタンスが生成されpackで追加されます。
|
10
|
+
|
11
|
+
■本題
|
1
12
|
TkinterのNotebookウィジットを使ったサンプルです。
|
2
13
|
質問者様が求めているのはこういうコードでしょうか?
|
3
14
|
|