หลังจากที่เรานั้นได้ทำการเรียนรู้เกี่ยวกับการใช้งาน GUI (จียูไอ) ในบทความ GUI คืออะไร จียูไอ คือการนำเอารูปภาพ หรือสัญลักษณ์มาใช้ในการสื่อความหมายระหว่างผู้ใช้ กับตัวโปรแกรม,และบทความ วิธีการเปลี่ยนภาพพื้นหลัง GUI (จียูไอ) ของโมดูล Tkinter (ทีเคอินเตอร์) กันไปบ้างแล้วในบทความนี้เราจะมาแนะนำการส่งค่าจากโมดูลที่เราเขียนรับค่าจากผู้ใช้ ผ่าน GUI (จียูไอ) ไปยังโมดูลอื่นๆ
ทำไมต้อง ส่งค่าที่รับจากผู้ใช้ผ่าน GUI (จียูไอ) ไปยังโมดูลอื่นๆ
โดยปกติแล้วนั้นเราสามารถ เขียนโมดูลของเราให้อยู่ร่วมกับโมดูล GUI (จียูไอ) ได้ แต่ถ้าหากโมดูลมของเรานั้นมีขนาดใหญ่และยังใส่โปรแกรม GUI (จียูไอ) เข้าไปเสริมก็จะทำให้ยิ่งขึ้นไปอีกดังนั้นเราจึงควรแยกระหว่างโมดูลหลักและโมดูล GUI (จียูไอ) เพื่อความสะดวกในการแก้ไข ปรับปรุง และพัฒนา
วิธีการส่งค่าที่รับจากผู้ใช้ผ่าน GUI (จียูไอ) ไปยังโมดูลอื่นๆ
ด้านล่างจะโค้ดตัวอย่างระหว่าง โมดูล GUI (จียูไอ) กับโมดูล หลักของเรา โดยเราจะไปดูที่โมดูล GUI (จียูไอ) กันก่อน
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import filedialog
import re,time
class sum(tk.Tk): #class สำหรับการรับค่าจากผู้ใช้
def __init__(self):
tk.Tk.__init__(self)
self.geometry('500x400')
self.title('OpenERP')
self.configure(background='#d2dae2')
self.label = tk.Label(self,text='Login',font='times 20',bg='#d2dae2')
self.label.pack()
self.hostname = tk.Label(self,text='hostname:',font='times 18',bg='#d2dae2')
self.hostname.place(x=0,y=50)
self.content2 = tk.StringVar()
self.content2.set("")
self.hostnamei = tk.Entry(self,bd="2",textvariable=self.content2)
self.hostnamei.place(x=200,y=58,width=200)
self.database = tk.Label(self,text='Database:',font='times 18',bg='#d2dae2')
self.database.place(x=0,y=80)
self.content3 = tk.StringVar()
self.content3.set('')
self.databasei = tk.Entry(self,bd="2",textvariable=self.content3)
self.databasei.place(x=200,y=88,width=200)
self.user = tk.Label(self, text='User:', font='times 18', bg='#d2dae2')
self.user.place(x=0,y=110)
self.content4 = tk.StringVar()
self.content4.set('')
self.useri = tk.Entry(self, bd="2",textvariable=self.content4)
self.useri.place(x=200,y=118,width=100)
self.password = tk.Label(self, text='password:', font='times 18', bg='#d2dae2')
self.password.place(x=0,y=140)
self.content5 = tk.StringVar()
self.content5.set('')
self.passwordi = tk.Entry(self, bd="2",show='*',textvariable=self.content5)
self.passwordi.place(x=200,y=148,width=100)
self.path = tk.Label(self, text='Path Webdriver', font='times 18', bg='#d2dae2')
self.path.place(x=0, y=170)
self.content = tk.StringVar()
self.content.set('')
self.pathi = tk.Entry(self, bd="2", textvariable=self.content)
self.pathi.place(x=200, y=178, width=200)
line_text = '---------------------------------------------------------------'
self.line = tk.Label(self, text=line_text, font='times 18', bg='#d2dae2')
self.line.place(x=0,y=200)
self.testdata = tk.Label(self, text='TestData', font='times 18', bg='#d2dae2')
self.testdata.place(x=200,y=200)
self.quo = tk.Label(self, text='amount of Quotation:', font='times 18', bg='#d2dae2')
self.quo.place(x=0,y=230)
self.content7 = tk.StringVar()
self.content7.set('10')
self.quoi = tk.Entry(self, bd="2",textvariable = self.content7)
self.quoi.place(x=200,y=238,width=238)
self.month = tk.Label(self, text='month:', font='times 18', bg='#d2dae2')
self.month.place(x=0,y=260)
self.content8 = tk.StringVar()
self.content8.set('01,02,03,04')
self.monthi = tk.Entry(self, bd="2",textvariable=self.content8)
self.monthi.place(x=200,y=268,width=200)
self.year = tk.Label(self, text='year:', font='times 18', bg='#d2dae2')
self.year.place(x=0,y=292)
self.content9= tk.StringVar()
self.content9.set('2018')
self.yeari = tk.Entry(self, bd="2",textvariable=self.content9)
self.yeari.place(x=200,y=298,width=200)
self.b1 = tk.Button(self, text='browse',bg = 'blue',fg = 'white'
,command = self.browse)
self.b1.place(x=410,y=178) #browser
self.b2 = tk.Button(self, text='submit', bg='blue', fg='white'
,command = self.submit)
self.b2.place(x=200,y=350) # submit
def browse(self):
self.filename = filedialog.askopenfilename(initialdir="/", title="Select file",
filetypes=(("files", "*.exe"), ("all files", "*.*")))
print(self.filename)
path = self.filename
self.content.set(path)
def submit(self):
print("submit")
tk.Tk.quit(self)
'-------------------------------------------------------------------------------------------'
def regulare(pattern1,text): #โมดูลแยกคำ
print('patt',pattern1)
print("text",text)
regex = re.compile(pattern=r'%s'%pattern1) # กำหนดแพทเทิร์น
regex = regex.findall(text) # หาคีย์เวริดจากแพทเทิร์น
print(regex)
return regex
'-------------------------------------------------------------------------------------------'
app = sum() #นำออบเจคมารองรับคลาส sum เพื่อรับค่าจากผู้ใช้ผ่าน GUI
app.mainloop()
class sendvalue: #class การส่งค่าข้อมูลเพื่อให้โมดูลอื่นเรียกใช้ในโดมูล โดยคลาสนี้จะรีเทรินค่าๆต่างออกโดยใช้
#ออบเจคที่เราใช้ในการรับค่าจากผู้ใช้ผ่าน GUI (ในที่นี้ ออบเจค คือ app)
def __init__(self):
print("Ready Send Key")
def send_path(self):
return app.pathi.get() #str
def send_month(self):
return regulare('\w+', app.monthi.get()) #list
def send_year(self):
return app.yeari.get() #str
def send_quot(self):
return app.quoi.get() #int
def send_url(self):
return app.hostnamei.get()+"?db="+ app.databasei.get() #str
def send_user(self):
return app.useri.get() #str
def send_pass(self):
return app.passwordi.get()
โค้ดต่อมาจะเป็นโมดูลหลักของเราที่จะนำค่าที่ได้จากผู้ใช้ผ่าน GUI (จียูไอ) เพียงเท่านี้เราก็สามารถรับค่าจาก GUI (จียูไอ) ได้แล้ว
import ddd as tk #อิมพอร์ตโมดูลที่รับค่าจากผู้ใช้มา แล้วนำตัวแปรมารับค่ารีเทิร์นของเมธอดต่างๆ
a = tk.sendvalue()
path = a.send_path()
month = a.send_month()
year = a.send_year()
Quot = int(a.send_quot())
open_erp = a.send_url()
user_id = a.send_user()
password = a.send_pass()
print(path,month,year,Quot)
สามารถศึกษาเพิ่มเติมได้จากบทความ