我已经创建了一些python代码,现在我希望为它创建一个前端。举个例子,我使用的是Tkinter库和一个简单的“注册登录”应用程序。但是,关于如何将python代码与GUI连接起来,是否有任何一般信息?下面是我用来帮助社区理解我所要求的东西的例子。
import tkinter as tk
HEIGHT = 600
WIDTH = 700
root = tk.Tk()
tk.Tk.title(root, "Welcome")
def button_1_clicked(first_name_entry, last_name_entry, username_entry, password_entry, reenter_password_entry):
final_str = 'First Name: %s \nLast Name: %s \nUsername: %s \nPassword: %s \nRe-Enter Password:%s' % (
first_name_entry, last_name_entry, username_entry, password_entry, reenter_password_entry)
print(final_str)
def clicked():
print("function works")
canvas_1 = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas_1.pack()
frame = tk.Frame(root, bg='black')
frame.place(relx=0, rely=0, relheight=1, relwidth=2, anchor='n')
label = tk.Label(frame, text="Welcome User", font=('Courier Prime', 22, 'bold'), bg='black', fg='white')
label.place(relx=0.75, rely=0.1, relheight=0.14, relwidth=0.6, anchor='n')
lower_frame = tk.Frame(root, bg='black', bd=10)
lower_frame.place(relx=0.5, rely=0.25, relheight=0.62, relwidth=0.75, anchor='n')
label_1 = tk.Label(lower_frame, bg='yellow', text="First Name", font=('Microsoft Sans Serif', 11))
label_1.place(relx=0.08, rely=0.1, relheight=0.062, relwidth=0.25)
first_name_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
first_name_entry.focus_force()
first_name_entry.place(relx=0.4, rely=0.1, relheight=0.062, relwidth=0.45, anchor='nw')
label_2 = tk.Label(lower_frame, bg='yellow', text="Last Name", font=('Microsoft Sans Serif', 11))
label_2.place(relx=0.08, rely=0.195, relheight=0.062, relwidth=0.25)
last_name_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
last_name_entry.place(relx=0.4, rely=0.195, relheight=0.062, relwidth=0.45, anchor='nw')
label_3 = tk.Label(lower_frame, bg='yellow', text="Username", font=('Microsoft Sans Serif', 11))
label_3.place(relx=0.08, rely=0.29, relheight=0.062, relwidth=0.25)
username_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
username_entry.place(relx=0.4, rely=0.29, relheight=0.062, relwidth=0.45, anchor='nw')
label_4 = tk.Label(lower_frame, bg='yellow', text="Password", font=('Microsoft Sans Serif', 11))
label_4.place(relx=0.08, rely=0.385, relheight=0.062, relwidth=0.25)
password_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
password_entry.place(relx=0.4, rely=0.385, relheight=0.062, relwidth=0.45, anchor='nw')
label_5 = tk.Label(lower_frame, bg='yellow', text="Re-Enter Password", font=('Microsoft Sans Serif', 10))
label_5.place(relx=0.08, rely=0.48, relheight=0.062, relwidth=0.25)
reenter_password_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
reenter_password_entry.place(relx=0.4, rely=0.48, relheight=0.062, relwidth=0.45, anchor='nw')
create_account_button = tk.Button(lower_frame, bg='#A7BCD8', text="Create Account", font=('Microsoft Sans Serif', 12),
command=lambda: button_1_clicked(first_name_entry.get(),
last_name_entry.get(),
username_entry.get(),
password_entry.get(),
reenter_password_entry.get()))
create_account_button.place(relx=0.38, rely=0.68, relheight=0.09, relwidth=0.27, anchor='nw')
label_6 = tk.Label(lower_frame, bg='black', fg='white', text="OR", font=('Microsoft Sans Serif', 12, 'bold'))
label_6.place(relx=0.42, rely=0.787, relheight=0.07, relwidth=0.2)
button_1 = tk.Button(lower_frame, bg='#A7BCD8', text="Login", font=('Microsoft Sans Serif', 12), command=lambda: clicked())
button_1.place(relx=0.38, rely=0.88, relheight=0.09, relwidth=0.27, anchor='nw')
if __name__ == '__main__':
root.mainloop()
单击“button_1”时,我想打开以下窗口:
import tkinter as tk
HEIGHT = 600
WIDTH = 700
app = tk.Tk()
tk.Tk.title(app, "Home Area")
canvas_1 = tk.Canvas(app, height=HEIGHT, width=WIDTH)
canvas_1.pack()
frame = tk.Frame(app, bg='black')
frame.place(relx=0, rely=0, relheight=1, relwidth=2, anchor='n')
label = tk.Label(frame, text="Enter Credentials", font=('Courier Prime', 22, 'bold'), bg='black', fg='white')
label.place(relx=0.75, rely=0.1, relheight=0.14, relwidth=0.6, anchor='n')
lower_frame = tk.Frame(app, bg='black', bd=10)
lower_frame.place(relx=0.5, rely=0.25, relheight=0.62, relwidth=0.75, anchor='n')
label_3 = tk.Label(lower_frame, bg='yellow', text="Username", font=('Microsoft Sans Serif', 11))
label_3.place(relx=0.08, rely=0.29, relheight=0.062, relwidth=0.25)
username_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
username_entry.place(relx=0.4, rely=0.29, relheight=0.062, relwidth=0.45, anchor='nw')
label_4 = tk.Label(lower_frame, bg='yellow', text="Password", font=('Microsoft Sans Serif', 11))
label_4.place(relx=0.08, rely=0.385, relheight=0.062, relwidth=0.25)
password_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
password_entry.place(relx=0.4, rely=0.385, relheight=0.062, relwidth=0.45, anchor='nw')
label_5 = tk.Label(lower_frame, bg='yellow', text="Re-Enter Password", font=('Microsoft Sans Serif', 10))
label_5.place(relx=0.08, rely=0.48, relheight=0.062, relwidth=0.25)
reenter_password_entry = tk.Entry(lower_frame, bg='red', font=('Microsoft Sans Serif', 11), fg='white')
reenter_password_entry.place(relx=0.4, rely=0.48, relheight=0.062, relwidth=0.45, anchor='nw')
app.mainloop()
另外,我想指出,同时使用'pack()‘和'place()’是不好的做法。
,所以我的问题是,关于如何将python与GUI连接起来,有什么一般性的信息吗?
在这种情况下,当单击'Login‘按钮(button_1)时,如何使用我的函数' clicked ()’将“主页/注册页/第一页”连接到“第二页/登录页”。
谢谢你的帮助,谢谢你,
发布于 2021-05-25 01:31:01
解决方案1
在Toplevel中划分您的GUI
from tkinter import *
from tkinter.ttk import *
class Gui(Tk):
def __init__(self):
super(Gui, self).__init__()
self.btn_open_new_window = Button(self, text="Open a new window", command=self.open_new_window)
self.btn_open_new_window.pack(pady=50, padx=150)
def open_new_window(self):
NewWindow(master=self)
class NewWindow(Toplevel):
def __init__(self, *args, **kwargs):
super(NewWindow, self).__init__(*args, **kwargs)
self.hello_label = Label(self, text="HELLO, I'M A NEW WINDOW!")
self.hello_label.pack(pady=50, padx=150)
if __name__ == "__main__":
app = Gui()
app.mainloop()
解决方案2
将GUI划分为帧
from tkinter import *
from tkinter.ttk import *
class Gui(Tk):
def __init__(self):
super(Gui, self).__init__()
self.first_frame = Frame(self)
self.first_label = Label(self.first_frame, text="I'm a label in the first frame")
self.first_label.pack(pady=10)
self.first_frame.pack()
self.second_frame = Frame(self)
self.second_label = Label(self.second_frame, text="I'm a label in the second frame")
self.second_label.pack(pady=10)
self.btn_frame = Frame(self)
self.btn_previous = Button(self.btn_frame, text="<< previous", command=self.previous_frame)
self.btn_previous.pack(pady=20, padx=10, side=LEFT)
self.btn_next = Button(self.btn_frame, text="next >>", command=self.next_frame)
self.btn_next.pack(pady=20, padx=10, side=LEFT)
self.btn_frame.pack()
self.frames = [self.first_frame, self.second_frame]
self.frame_index = 0
def next_frame(self):
for frame in self.frames:
frame.pack_forget()
self.btn_frame.pack_forget()
self.frame_index = self.frame_index + 1
self.frame_index = self.frame_index if self.frame_index < len(self.frames)\
else self.frame_index // len(self.frames)
self.frames[self.frame_index].pack()
self.btn_frame.pack()
def previous_frame(self):
for frame in self.frames:
frame.pack_forget()
self.btn_frame.pack_forget()
self.frame_index = self.frame_index - 1
self.frame_index = self.frame_index if self.frame_index >= 1 else 0
self.frames[self.frame_index].pack()
self.btn_frame.pack()
if __name__ == "__main__":
app = Gui()
app.mainloop()
https://stackoverflow.com/questions/67680542
复制相似问题