I'm trying to program with gui . Also i used tkinter designer and trying to make gui with 2 page.When i run program it shows page 1 but button of first page and button of second page appear in same coordinate, and second page 2 is placed right on it . How do i fix this
from pathlib import Path
from tkinter import Tk, Canvas, Entry, Button, PhotoImage
OUTPUT_PATH = Path(__file__).parent
ASSETS_PATH1 = OUTPUT_PATH / Path(r"C:\Users\user\Documents\interface-py\exp99\build\assets\frame0")
def relative_to_assets1(path: str) -> Path:
return ASSETS_PATH1 / Path(path)
ASSETS_PATH2 = OUTPUT_PATH / Path(r"C:\Users\user\Documents\interface-py\exp99\build\assets\frame1")
def relative_to_assets2(path: str) -> Path:
return ASSETS_PATH2 / Path(path)
def create_page_1(window):
global image_image_1
global entry_image_1
global entry_image_2
global button_image_1
canvas = Canvas(
window,
bg="#FFFFFF",
height=625,
width=1000,
bd=0,
highlightthickness=0,
relief="ridge"
)
# canvas.place(x=0, y=0)
image_image_1 = PhotoImage(
file=relative_to_assets1("image_1.png"))
image_1 = canvas.create_image(
839.0,
312.0,
image=image_image_1
)
canvas.create_text(
122.0,
56.0,
anchor="nw",
text="Password Checker",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault ExtraBold", 45 * -1)
)
canvas.create_text(
117.0,
157.0,
anchor="nw",
text="Username",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault Bold", 18 * -1)
)
entry_image_1 = PhotoImage(
file=relative_to_assets1("entry_1.png"))
entry_bg_1 = canvas.create_image(
329.0,
242.0,
image=entry_image_1
)
entry_1 = Entry(
bd=0,
bg="#FFFFFF",
fg="#000716",
highlightthickness=0,
font=("RobotoFlex Regular", 18 * -1)
)
entry_1.place(
x=128.514874458313,
y=215.0,
width=400.970251083374,
height=58.0
)
canvas.create_text(
133.0,
228.0,
anchor="nw",
text="Enter your username",
fill="#5F636D",
font=("RobotoFlex Regular", 14 * -1)
)
#logical functions starts from here
def getInput(): #input from button & calculations
username=entry_1.get()
password=entry_2.get()
print("Username: ",username)
print("Password: ",password)
print("Simple check :",passwordCheck(password))
print("Davhtsal :",characterCheck(password))
print("Daraalal :",positionCheck(password))
print("percent :",percent)
a = (percent*100)/10
print("huvi :",a)
show_page(2)
percent = 0
##simple check starts from here
def passwordCheck(password): #check simple password func
global percent
special = "!@#$%^&*()_+" #tusgai temdegtuud aguulsn string
up = 0 #tom usgiin too
low = 0 #jijig usgiin too
spcl = 0 #tusgai temdegtiin too
count = 0 #too
for i in password :
if i.isupper() : #herev tom useg bol
up += 1
elif i.islower() : #jijg usg bol
low += 1
elif i in special : #temdegt bol
spcl += 1
else: #ugui bol too baina
count += 1
percent = percent + (len(password) - 12) # 10 oos desh orh burt 1 eer nemegdene
# print(percent)
if up>=2 :
percent +=2 #2
if low>=2 :
percent +=2 #2
if spcl>=1 :
percent +=2 #2
if count >=2 :
percent +=2 #2
if up>=2 and low>=2 and spcl>=1 and count>=2 and len(password)>=12:
return 'Passed' #engiin nuhtsuliig davsan msm ugnu
#herev nuhtsul hangaagui uyd haygdsn nuhtsuliig butsaana
else :
if len(password)<=12:
return 'Urt 12 oos ih baih ystoi.'
elif up<=1:
return 'Tom temdegt dor 2 hayj baina'
elif low<=1:
return 'Jijig temdegt dor hayj 2 baina'
elif spcl<1:
return 'Tusgai temdegt dor hayj 1 baina'
else :
return 'Too dor hayj 2 baina'
def characterCheck(password): # usgiin davhtsal
global percent
character = {} #davhtsliig uusgeh dic
for char in password: #dic uusgne
if char in character:
character[char] += 1
else:
character[char] = 1
count = 0 #toolur
for i in character.values() :
if i>=2 : #hervee temdegt 2 oos deesh davhatssan bol
count += i
# davhtsagui bol 1 eer nemegdn
#hamgiin bagdaa 3 demtegt 2 oos deehs oroh bolojmtoi
if count >= len(character.values()):
return 'Adilhan temdegtiin too ih baina'
else :
return 'Passed'
def check(a,b): #2 temdegtiig daraallsn esehiig shalgana
count = 0
characters = "!@#$%^&*()_+|\:;'<>?/~"
a_asc = ord(a)
b_asc = ord(b)
if a_asc == b_asc or abs(a_asc - b_asc) == 1 or abs(a_asc-b_asc) == 32 or abs(a_asc-b_asc)==33:
count += 1
elif (a in characters) and (b in characters) and abs(characters.index(a)-characters.index(b))==1:
count += 1
return count
def positionCheck(password): #daraallig shalgana
global percent
ll = len(password)
count = 0
for i in range(ll-1):
count += check(password[i],password[i+1])
# print("{}, {} : {}".format(password[i],password[i+1],count))
count += 1
pp = (count/len(password))*100
# percent += ((100-pp)//10)
if pp<=40 :
return 'Passed'
else :
return 'Usguud daraallsn bn'
#Simple check ends here
#logical functions ends here
button_image_1 = PhotoImage(
file=relative_to_assets1("button_1.png"))
button_1 = Button(
image=button_image_1,
borderwidth=0,
highlightthickness=0,
command=getInput,
relief="flat"
)
button_1.place(
x=117.0,
y=500.0,
width=424.0,
height=45.0
)
canvas.create_text(
117.0,
304.0,
anchor="nw",
text="Password\n",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault Bold", 18 * -1)
)
entry_image_2 = PhotoImage(
file=relative_to_assets1("entry_2.png"))
entry_bg_2 = canvas.create_image(
329.0,
389.0,
image=entry_image_2
)
entry_2 = Entry( # entry added
bd=0,
bg="#FFFFFF", #bg changed 2 white
fg="#000716",
highlightthickness=0,
font=("RobotoFlex Regular", 18 * -1) #font added
)
entry_2.place(
x=128.514874458313,
y=360.0,
width=400.970251083374,
height=58.0,
)
canvas.create_text(
133.0,
375.0,
anchor="nw",
text="Enter your password",
fill="#5F636D",
font=("RobotoFlex Regular", 14 * -1)
)
return canvas
# Page 2
def create_page_2(window):
global image_image_2
global button_image_2
canvas = Canvas(
window,
bg="#FFFFFF",
height=625,
width=1000,
bd=0,
highlightthickness=0,
relief="ridge"
)
# canvas.place(x=0, y=0)
image_image_2 = PhotoImage(
file=relative_to_assets2("image_1.png"))
image_2 = canvas.create_image(
839.0,
312.0,
image=image_image_2
)
canvas.create_text(
122.0,
56.0,
anchor="nw",
text="Password Checker",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault ExtraBold", 45 * -1)
)
canvas.create_text(
117.0,
157.0,
anchor="nw",
text="Simple checking\n",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault Black", 18 * -1)
)
button_image_2 = PhotoImage(file=relative_to_assets2("button_2.png"))
def button_cmd2():
print("button2 clicked")
show_page(1)
button_2 = Button(
image=button_image_2,
borderwidth=0,
highlightthickness=0,
command=button_cmd2,
relief="flat"
)
button_2.place(
x=117.0,
y=500.0,
width=424.0,
height=45.0
)
canvas.create_text(
117.0,
190.0,
anchor="nw",
text="Simple check",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
222.0,
anchor="nw",
text="Dawhtsal\n",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
253.0,
anchor="nw",
text="Daraalal",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
285.0,
anchor="nw",
text="Percent\n",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
329.0,
anchor="nw",
text="Advanced checking",
fill="#000000",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault Black", 18 * -1)
)
canvas.create_text(
117.0,
362.0,
anchor="nw",
text="Brute force",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
394.0,
anchor="nw",
text="Rockyou\n",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
canvas.create_text(
117.0,
424.0,
anchor="nw",
text="Dictionary",
fill="#5F636D",
font=("RobotoFlexNormalNormalNormalNormalNormalNormalNormalNormalNormalDefault SemiBold", 16 * -1)
)
return canvas
# Controller function to switch between pages
def show_page(page_num):
if page_num == 1:
canvas_1.pack()
canvas_2.pack_forget()
elif page_num == 2:
canvas_2.pack()
canvas_1.pack_forget()
# canvas_2.pack()
# Main application
window = Tk()
window.geometry("1000x625")
window.configure(bg="#FFFFFF")
canvas_1 = create_page_1(window)
canvas_2 = create_page_2(window)
# Add buttons or other elements to switch between pages
# button_to_page_1 = Button(window, text="Go to Page 1", command=lambda: show_page(1))
# button_to_page_1.pack()
# button_to_page_2 = Button(window, text="Go to Page 2", command=lambda: show_page(2))
# button_to_page_2.pack()
# Initially show Page 1
show_page(1)
window.resizable(False, False)
window.mainloop()
I just want to make gui that switch between 2 pages but buttons are placed in same coordinate and just last button appears . When i change coordinate of button2 button1 isjust on that coordinate
You create the two buttons as children of the root
window
because you do not specify the master of them, so the last created one will be shown since both are put in the same position and have same size.I think you want to create them inside their corresponding canvas and put them into the canvas using
canvas.create_window(...)
instead: