Montague27 Montague27 - 3 months ago 22
Python Question

Python ttk notebook showing selected tab wrongly

from tkinter import *
from tkinter import ttk

class MainGame(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()

def tab_change(self, event):
tab_id = self.page.index('current')
print(tab_id, self.page.tab(tab_id, 'text'))

def initUI(self):
global canvas
self.parent.title('PythonPage')
self.pack(fill = BOTH, expand = 1)
self.page = ttk.Notebook(self, width = 646 ,height = 629)
self.page1 = Frame(self)
self.page2 = Frame(self)
self.page.add(self.page1, text = 'Tab1')
self.page.add(self.page2, text = 'Tab2')
self.page.bind('<ButtonPress-1>', self.tab_change)
self.page.pack(expand = 0, anchor = 'w', side = 'top')

root = Tk()
root.geometry('925x650')
main = MainGame(root)
root.mainloop()


tab_change
can show their id and names, but not correctly.

When
Tab1
is clicked, I clicked
Tab2
but it still print
0 Tab1
, it needs one more click to print
1 Tab2
.

Tab2
click to
Tab1
is the same, it needs one more click to show the current selected tab.

I want to find why the tabs need double click? And how can I get selected tab correctly by a single click?

Answer

Change:

self.page.bind('<ButtonPress-1>', self.tab_change)

To:

self.page.bind('<ButtonRelease-1>', self.tab_change)

Because unless you have released the pressed button, the tab hasn't changed!

enter image description here