我是面向对象编程的初学者。
我已经编写了下面的程序,但是我不能用checkbuttons
得到第二个窗口,同时也不能得到checkbutton
映射的结果。你知道吗
我当然有一些编程错误,但我不知道在哪里? 我使用的是python3.4
import os
from tkinter.filedialog import askopenfilename
global listmgw
class Checkbar(object):
# fenetre d'echange pour selectionner les mgw
def __init__(self):
dicorefsys={}
self.filepath='C:/Desktop/fichiers projet python/travail/'#directory whitch contains .txt files which will be my reference
self.filename=''
self.filepathes=[]
os.chdir (self.filepath+'/'+self.filename)
self.reference=''
print('reference=',self.reference)
self.root=Tk()
self.root.title('Programe Pricipale')
#self.message = Label(self, text="La reference est:")
self.mainchoice()
self.message = Label(self.root, text="choisissez votre reference.").grid(row=2,column=1,columnspan=3,sticky=N,padx =10, pady =5)
#
Button(self.root,text='modifier \n Reference', command=self.changeref).grid(row=3,column=1,sticky=S,padx =10, pady =5)
Button(self.root,text='ajout \n supperssion \n MGW', command=allstates()).grid(row=3,column = 3,sticky=S,padx =10, pady =5)
Button(self.root,text='Quitter', command=self.root.quit).grid(row=3,column = 5,sticky=S,padx =10, pady =5)
self.root.mainloop()
def mainchoice(self):
#
print ('on dans mainchoice')
def changeref (self):
import dicoref
dicorefsys={}
#chdir(self.filepath)
#self.filepath=''
#self.filename=""
(self.filepath, self.filename) = os.path.split(askopenfilename())
print(self.filepath,self.filename)
dicorefsys=dicoref.reference(self.filepath+'/',self.filename)
#print(dicorefsys)
#self.message["text"] = "La MGW de reference est {}.".format(self.filename)
self.reference=str(dicorefsys['system-name'])
print('self.reference=',self.reference)
self.message = Label(self.root, text='La MGW de reference est: '+str(self.reference)).grid(row=2,column=1,columnspan=3,sticky=N,padx =10, pady =5)
return dicorefsys
#
class Selecteur(object):
def __init__(self,parent=None, picks=[]):
Frame.__init__(self, parent)
#fen1=Tk
self.vars = []
print('on est dans le Selecteur')
for pick in picks:
print('pick=',pick)
var = IntVar()
self.chk = Checkbutton(fen1, text=pick, variable=var)
self.chk.grid()
self.vars.append(var)
def state(self):
print('je suis dans state')
print (("lambda=",lambda var: var.get()))
print('map=',map((lambda var: var.get()), self.vars))
return map((lambda var: var.get()), self.vars)
def choixmgwed2(self):
print('je suis dans choixmgwed2')
i = 0
nbvmg = 0
listmgw = []
filepath = []
listmgw = os.listdir('C:/Desktop/fichiers projet python/config_mgw')#directory which contains .txt configuration files
print('danschoix listgmw=',listmgw)
nbvmg = len(listmgw)
filepath.append('C:/Desktop/fichiers projet python/config_mgw/' + listmgw[i])
i = i + 1
return listmgw
def allstates(lng):
print(lng.__doc__)
print(list(lng.state()))
# Programme principal :
if '__main__' == __name__:
from tkinter import *
print('c est parti')
f = Checkbar()
实际版本的问题是:
checkbutton
的“映射”。你知道吗我怎样才能修好它们?你知道吗
主要的问题似乎是您的类继承自
object
,但是您试图调用Frame
类的__init__
函数。我认为你的意图是继承Frame
:您的代码似乎还依赖于一个名为
fen1
的全局变量,您从未设置过它。似乎fen1
引用了一个小部件,因为您使用它作为创建Checkbutton
的第一个参数。如果您的类继承自Frame
,那么使用self
而不是fen1
似乎更有意义,这样checkbutton就进入框架而不是根窗口。你知道吗您还有一个与
Selecteur
类无关的问题。有一个按钮定义如下命令属性:由于使用了
allstates()
,python将立即调用该函数,并将结果赋给command
属性。但是,该函数返回的是列表,而不是函数。我猜您的意图是让按钮在单击时调用allstates
,因此您需要将上面的更改为:虽然,
allstates
需要一个论点,但我不知道这个论点应该是什么,所以我不确定你的真正意图是什么。你知道吗除此之外,你的代码似乎工作。您问题中的示例从未实际调用
Selecteur
,因此这可能是另一个问题,除非这只是发布的代码的问题,而不是实际代码的问题。你知道吗相关问题 更多 >
编程相关推荐