เรียกแฟ้ม glade จาก directory อื่นไม่ได้

ผมทดลองเขียนโปรแกรม login.py ขี้นมาใช้งานโดย glade ดังนี้

#!/usr/bin/env python
 
import sys
import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade
 
class Login:
 
	def __init__(self):
		self.wTree = gtk.glade.XML("login.glade","loginwindow") 
		dic = { "on_loginwindow_destroy" : self.on_Quit,
				"on_button_close_clicked" : self.on_Quit,
				"on_button_apply_clicked" : self.on_Check,
				"on_button_apply_enter" : self.on_Check}
		self.wTree.signal_autoconnect(dic)
		self.entry_user = self.wTree.get_widget("entry_user")
 
	def on_Check(self, widget):
		self.user = self.entry_user.get_text()
		print self.user
 
	def on_Quit(self, widget):
		gtk.main_quit()
 
if __name__ == "__main__":
	login = Login()
	gtk.main()

โดยผมเก็บแฟ้ม login.glade และ login.py ไว้ใน /home/user/project
ในกรณีที่ผมเรียก คำสั่ง python login.py ภายใน directory ดังกล่าว
ผมสามารถใช้งานได้ถูกต้อง

แต่ถ้าผมเรียก python /home/user/project/login.py จากที่อื่น
ผมจะเจอกับข้อความ error ดังนี้ครับ

(login.py:6557): libglade-WARNING **: could not find glade file 'login.glade'
Traceback (most recent call last):
  File "/home/user/project/login.py", line 28, in <module>
    login = Login()
  File "/home/user/project/login.py", line 12, in __init__
    self.wTree = gtk.glade.XML("login.glade","loginwindow") 
RuntimeError: could not create GladeXML object

ช่วยแนะนด้วยครับ ว่าต้องทำอะไรต่อ ขอบคุณครับ

คิดว่าแก้ปัญหาได้แล้วครับ
แก้ไขบรรทัดนี้

self.wTree = gtk.glade.XML("login.glade","loginwindow")

โดยระบุpath ให้เต็มๆ เป็น

self.wTree = gtk.glade.XML("/home/user/project/login.glade","loginwindow")

แบบนี้ใช้งานได้ครับ
หรือมีวิธีอื่นๆ อีกหรือเปล่าครับ

sugree's picture

ดูจาก path ของตัวโปรแกรมใน sys.argv[0] แบบนี้

import os
import sys
rootpath = os.path.dirname(sys.argv[0])
self.wTree = gtk.glade.XML(os.path.join(rootpath,"login.glade"),"loginwindow")

ขอบคุณมากครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น