Как перейти запустить / выполнить файл2 при нажатии кнопки из файла1 в tkinter - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть 2 Python-файлы Файл 1 и Файл 2 , которые закодированы в tkinter.

Файл 1 is Welcome page с 1 кнопкой Войдите в систему как врач.

Файл 2 - это login page, в котором врач вводит свои учетные данные.оба файла закодированы в tkinter

Запуск: -

  1. Файл приветствия (файл 1) будет работать в GUI FORM
  2. При нажатии кнопки на файле 1 ее следует перенаправить на страницу входа в систему (файл 2)

Примечание: -

Обафайл отличается .

Файл 1 Welcome.py

#import modules
from tkinter import *
import random
from tkinter import messagebox
import importlib
# creating the object
root = Tk()

# resolution of the window
root.geometry("500x540+500+100")
root.title ("ABC HOSPITAL")

# preventing the resize feature
root.resizable(False, False)
def doc():
    importlib.import_module('login')

#LABELS=====================================================
heading = Label(font=('times new roman' , 25 , 'bold'), text="WELCOME TO ABC HOSPITAL", fg='black', bg='#fbf9d3')
heading.place(x=3, y=10)

heading = Label(font=('times new roman' , 22 , 'bold'), text="Choose Login", fg='black', bg='#fbf9d3')
heading.place(x=150, y=250)
#button to perform a command=======================================================
login = Button(font=('arial' , 20 , 'bold'),bd=14, text="DOCTOR's LOGIN", fg='white',bg='#04062c',width=27,height=2)
login.place(x=4,y=300)

root.mainloop()                             

Файл 2 login.py

#import modules
from tkinter import *
import mysql.connector
from mysql.connector import errorcode
import random
from tkinter import messagebox

# creating the object
root = Tk()

# resolution of the window
root.geometry("1520x790+0+0")
root.title ("ABC HOSPITAL")
root.iconbitmap('hospital.ico')

# preventing the resize feature
root.resizable(False, False)

#tkinter window
class Application:

#funtion for main frames=====================================================================================================================================================================

    def __init__(self, master):
        self.master = master

        # creating the frames in the master
        self.left = Frame(master, width= 1600, height= 900, bg='lightblue',relief=SUNKEN)
        self.left.pack(side=TOP)

        #Background Picture
        self.photo1 = PhotoImage(file='background.png')
        self.pic = Label(self.left, font=('arial' , 1 , 'bold'), image= self.photo1)
        self.pic.place(x=0, y=0)


#LABELS=====================================================
        self.heading = Label(self.left,font=('arial' , 50 , 'bold'), text="ABC Hospital", fg='black', bg='#06378b' ,anchor='w')
        self.heading.place(x=550, y=0)

        #Login Picture
        self.photo = PhotoImage(file= 'login.png')
        self.pic = Label(self.left, font=('arial' , 40 , 'bold'), image= self.photo ,fg = "lightblue", bg='#06378b')
        self.pic.place(x=640, y=100)

        # user name
        self.username = Label(self.left, text="Username", font=('arial 30 bold'), fg='black', bg='#063998')
        self.username.place(x=550, y=350)

        # password
        self.password = Label(self.left, text="Password", font=('arial 30 bold'), fg='black', bg='#063998')
        self.password.place(x=550, y=410)

#TEXTBOX=====================================================
        #username
        self.username_ent = Entry(self.left,font=('arial' , 20 , 'bold'))
        self.username_ent.place(x=750, y=360)

        #password
        self.password_ent = Entry(self.left, font=('arial' , 20 , 'bold'),show='*')
        self.password_ent.place(x=750, y=420)

# button to perform a command================================
        #button1
        self.login = Button(self.left,font=('arial' , 20 , 'bold'), text="LOGIN", bg='steelblue')
        self.login.place(x=700, y=480)

b = Application(root)                      
root.mainloop()                             

Нажата кнопка со страницы приветствия. Страница входа должна быть выполнена в виде графического интерфейса

PLZ. У меня есть мини-проект колледжа, но я застряла здесь....

1 Ответ

1 голос
/ 19 апреля 2019
  1. Это определенно неправильный способ открыть второе окно из главного окна. В Tkinter, если вам нужны дополнительные окна, мы используем Toplevel() вместо другого Tk(), хотя это будет работать, но не рекомендуемый подход.

  2. Вам не нужно importlib здесь, это можно сделать очень легко без его использования.

    Как вы можете определить функцию в вашем file.py, import file в своем основном файле, а затем вызвать ее нажатием кнопки в вашем файле 1 с помощью file.Run_login

    Пример:

    Файл 2

    def Run_Login():
        # creating the object
        root = Toplevel()
    
        # resolution of the window
        root.geometry("1520x790+0+0")
        root.title ("ABC HOSPITAL")
        # root.iconbitmap('hospital.ico')
    
        # preventing the resize feature
        root.resizable(False, False)
        Application(root)
    

    Файл 2:

    import file
    
    def doc():
        file.Run_Login(master=root)
    
  3. Также наследование Toplevel в вашем классе Application значительно упростит вашу работу, потому что тогда вы можете просто импортировать класс в свой File 1 from file import Application. Тогда в док вы можете позвонить.

    Пример:

    def doc():
        A = Application(master = root)
    

Полный код

Файл 1 - Window.py

#import modules
from tkinter import *
import random
from tkinter import messagebox

# Make sure you import name is same as the file name.
from login import Application

# creating the object
root = Tk()

# resolution of the window
root.geometry("500x540+500+100")
root.title ("ABC HOSPITAL")

# preventing the resize feature
root.resizable(False, False)

def doc():
    App = Application(root)

#LABELS=====================================================
heading = Label(font=('times new roman' , 25 , 'bold'), text="WELCOME TO ABC HOSPITAL", fg='black', bg='#fbf9d3')
heading.place(x=3, y=10)

heading = Label(font=('times new roman' , 22 , 'bold'), text="Choose Login", fg='black', bg='#fbf9d3')
heading.place(x=150, y=250)
#button to perform a command=======================================================
login = Button(font=('arial' , 20 , 'bold'),bd=14, text="DOCTOR's LOGIN", 
        fg='white',bg='#04062c',width=27,height=2, command=doc)
login.place(x=4,y=300)

mainloop() 

Файл 2 - login.py

#import modules
from tkinter import *
import mysql.connector
from mysql.connector import errorcode
import random
from tkinter import messagebox


#tkinter window
class Application(Toplevel):

#funtion for main frames=====================================================================================================================================================================

    def __init__(self, master=None):
        Toplevel.__init__(self, master)
        # resolution of the window
        self.geometry("1520x790+0+0")
        self.title ("ABC HOSPITAL")
        self.iconbitmap('hospital.ico')

        # preventing the resize feature
        self.resizable(False, False)

        # creating the frames in the master
        self.left = Frame(self, width= 1600, height= 900, bg='lightblue',relief=SUNKEN)
        self.left.pack(side=TOP)

        #Background Picture
        self.photo1 = PhotoImage(file='background.png')
        self.pic = Label(self.left, font=('arial' , 1 , 'bold'), image= self.photo1)
        self.pic.place(x=0, y=0)


#LABELS=====================================================
        self.heading = Label(self.left,font=('arial' , 50 , 'bold'), text="ABC Hospital", fg='black', bg='#06378b' ,anchor='w')
        self.heading.place(x=550, y=0)

        #Login Picture
        self.photo = PhotoImage(file= 'login.png')
        self.pic = Label(self.left, font=('arial' , 40 , 'bold'), image= self.photo ,fg = "lightblue", bg='#06378b')
        self.pic.place(x=640, y=100)

        # user name
        self.username = Label(self.left, text="Username", font=('arial 30 bold'), fg='black', bg='#063998')
        self.username.place(x=550, y=350)

        # password
        self.password = Label(self.left, text="Password", font=('arial 30 bold'), fg='black', bg='#063998')
        self.password.place(x=550, y=410)

#TEXTBOX=====================================================
        #username
        self.username_ent = Entry(self.left,font=('arial' , 20 , 'bold'))
        self.username_ent.place(x=750, y=360)

        #password
        self.password_ent = Entry(self.left, font=('arial' , 20 , 'bold'),show='*')
        self.password_ent.place(x=750, y=420)

# button to perform a command================================
        #button1
        self.login = Button(self.left,font=('arial' , 20 , 'bold'), text="LOGIN", bg='steelblue')
        self.login.place(x=700, y=480)


if __name__ == "__main__":    
     # Only runs when you run login.py if you import this file whatever after this if statement will not run.
     Application().mainloop()

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...