首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用GUI连接后端Python代码

如何用GUI连接后端Python代码
EN

Stack Overflow用户
提问于 2021-05-25 01:16:41
回答 1查看 505关注 0票数 0

我已经创建了一些python代码,现在我希望为它创建一个前端。举个例子,我使用的是Tkinter库和一个简单的“注册登录”应用程序。但是,关于如何将python代码与GUI连接起来,是否有任何一般信息?下面是我用来帮助社区理解我所要求的东西的例子。

代码语言:javascript
运行
复制
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”时,我想打开以下窗口:

代码语言:javascript
运行
复制
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 ()’将“主页/注册页/第一页”连接到“第二页/登录页”。

谢谢你的帮助,谢谢你,

EN

回答 1

Stack Overflow用户

发布于 2021-05-25 01:31:01

解决方案1

在Toplevel中划分您的GUI

代码语言:javascript
运行
复制
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划分为帧

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67680542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档