我想使用gtk在python中进行比较和合并工具。 在这个程序中,我想将文件路径存储在全局变量中以便在merge函数中使用。 text1用于存储第一个文件路径,text2用于存储第二个文件路径。 是否有任何其他方法可以在合并功能中使用两个文件路径。?
#!/usr/bin/python
import pygtk,gtk,os
global count
count=0
class pro:
def destroy(self,widget):
print("quit")
#def file_selection(
def file_selection(self,widget,textview,text):
self.filew=gtk.FileSelection("File selection")
self.filew.connect("destroy",self.destroy)
self.filew.ok_button.connect("clicked",self.file_ok_sel,textview,text)
self.filew.cancel_button.connect("clicked",lambda w:self.filew.destroy())
self.filew.set_filename("penguin.png")
self.filew.show()
def file_ok_sel(self,w,textview,text):
print("%s " % self.filew.get_filename())
text=self.filew.get_filename()
print(text)
an="/home/himanshu/a.txt"
self.result=os.system("stat " + text + ">"+an+"")
testbuffer=textview.get_buffer()
infile = open(an, "r")
global count
if(count==0):
text1=text
count=count+1
elif(count==1):
text2=text
if infile:
string = infile.read()
infile.close()
testbuffer.set_text(string)
textview.show()
def callback():
print("pagal")
def merging(self,widget):
print("-------")
print(text1)
print(text2)
print("---------")
def __init__(self):
self.window=gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Compare & Merge Tools")
self.window.connect("delete_event",lambda a1,a2:gtk.main_quit())
self.window.set_border_width(10)
self.window.show()
global text1
global text2
text1=text2=""
#main verticalbox
vbox=gtk.VBox(False,0)
self.window.add(vbox)
#--------------------------------------------
#Horizontal box for two files
hbox=gtk.HBox(False,0)
#first vertical box for horizontal
vbox1=gtk.VBox(False,0)
#button1
button1=gtk.Button("Select")
vbox1.pack_start(button1,False,False,0)
button1.show()
#textview1
textview1=gtk.TextView()
textbuffer1=textview1.get_buffer()
text1=button1.connect("clicked",self.file_selection,textview1,text1)
vbox1.pack_start(textview1,False,False,0)
textview1.show()
vbox1.show()
#second vertical box for horizontal
vbox2=gtk.VBox(False,0)
#button2
button2=gtk.Button("select")
vbox2.pack_start(button2,False,0)
button2.show()
#textview2
textview2=gtk.TextView()
textbuffer1=textview2.get_buffer()
text2=button2.connect("clicked",self.file_selection,textview2,text2)
vbox2.pack_start(textview2,False,False,0)
textview2.show()
vbox2.show()
hbox.pack_start(vbox1,False,False,0)
hbox.pack_start(vbox2,False,False,0)
vbox.pack_start(hbox,False,False,0)
hbox.show()
#---------------------------------------------
hbox3=gtk.HBox(False,0)
button_compare=gtk.Button("Compare")
button_merge=gtk.Button("Merge")
hbox3.pack_start(button_compare,False,0)
hbox3.pack_end(button_merge,False,0)
button_merge.connect("clicked",self.merging)
button_compare.show()
button_merge.show()
vbox.pack_start(hbox3,False,False,0)
hbox3.show()
vbox.show()
self.window.show()
def main():
gtk.main()
return
if __name__=="__main__":
pro()
main()
答案 0 :(得分:0)
正如评论中已经描述的那样,您应该使用属性而不是全局变量。 所以你使用:
self.text1 = ""
self.text2 = ""
而不是:
global text1
global text2
然后,您可以使用self.text1
访问班级的每个方法中的text1和text2属性。