有没有办法绑定到Tkinter中的所有数字键?
它应该等同于:
frame.bind("0", my_handler)
frame.bind("1", my_handler)
frame.bind("2", my_handler)
...
Run Code Online (Sandbox Code Playgroud)
我希望我能找到类似的东西:
frame.bind("< num>", my_handler)
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用.
在 python 中,我可以通过直接分配给属性或通过调用改变属性状态的方法来改变实例的状态:
foo.thing = 'baz'
Run Code Online (Sandbox Code Playgroud)
或者:
foo.thing('baz')
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方法来创建一个接受上述两种形式的类,该类可以扩展到大量具有这种行为的属性?(很快,我将展示一个我不太喜欢的实现示例。)如果您认为这是一个愚蠢的 API,请告诉我,但也许需要一个更具体的示例。说我有Document课。 Document可以有一个属性title。然而,title可能也希望有一些状态(字体,字体大小,对齐方式,...),但普通用户可能会很高兴只需将标题设置为字符串并完成它...
实现这一目标的一种方法是:
class Title(object):
def __init__(self,text,font='times',size=12):
self.text = text
self.font = font
self.size = size
def __call__(self,*text,**kwargs):
if(text):
self.text = text[0]
for k,v in kwargs.items():
setattr(self,k,v)
def __str__(self):
return '<title font={font}, size={size}>{text}</title>'.format(text=self.text,size=self.size,font=self.font)
class Document(object):
_special_attr = set(['title'])
def __setattr__(self,k,v):
if k in self._special_attr and hasattr(self,k):
getattr(self,k)(v)
else:
object.__setattr__(self,k,v)
def __init__(self,text="",title=""):
self.title = Title(title)
self.text = text
def __str__(self):
return str(self.title)+'<body>'+self.text+'</body>'
Run Code Online (Sandbox Code Playgroud)
现在我可以按如下方式使用它:
doc = …Run Code Online (Sandbox Code Playgroud) 当用户点击某个特定点时,我正试图动态地将垂直线添加到matplotlib图中.
import matplotlib.pyplot as plt
import matplotlib.dates as mdate
class PointPicker(object):
def __init__(self,dates,values):
self.fig = plt.figure()
self.ax = self.fig.add_subplot(111)
self.lines2d, = self.ax.plot_date(dates, values, linestyle='-',picker=5)
self.fig.canvas.mpl_connect('pick_event', self.onpick)
self.fig.canvas.mpl_connect('key_press_event', self.onpress)
def onpress(self, event):
"""define some key press events"""
if event.key.lower() == 'q':
sys.exit()
def onpick(self,event):
x = event.mouseevent.xdata
y = event.mouseevent.ydata
print self.ax.axvline(x=x, visible=True)
x = mdate.num2date(x)
print x,y,type(x)
if __name__ == '__main__':
import numpy as np
import datetime
dates=[datetime.datetime.now()+i*datetime.timedelta(days=1) for i in range(100)]
values = np.random.random(100)
plt.ion()
p = PointPicker(dates,values)
plt.show() …Run Code Online (Sandbox Code Playgroud) 我想使用启动子进程subprocess.Popen().
是否可以为该过程分配预定的PID?
在以下代码中,如果我使用:
for line in fin:
Run Code Online (Sandbox Code Playgroud)
它只执行'a'
但如果我使用:
wordlist = fin.readlines()
for line in wordlist:
Run Code Online (Sandbox Code Playgroud)
然后它执行直通z.
但是立即readlines()读取整个文件,这是我不想要的.
怎么避免这个?
def avoids():
alphabet = 'abcdefghijklmnopqrstuvwxyz'
num_words = {}
fin = open('words.txt')
for char in alphabet:
num_words[char] = 0
for line in fin:
not_found = True
word = line.strip()
if word.lower().find(char.lower()) != -1:
num_words[char] += 1
fin.close()
return num_words
Run Code Online (Sandbox Code Playgroud) 我有两个X轴和Y轴输入值.我想将直方图绘制为折线图.附图中提供了一个例子.我无法使用这些值绘制直方图.
ys = [0.21428571428571427, 0.14285714285714285, 0.047619047619047616, 0.11904761904761904, 0.09523809523809523, 0.09523809523809523, 0.023809523809523808, 0.09523809523809523, 0.11904761904761904, 0.047619047619047616]
xs = [0,1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我试过了
plt.hist(xs,ys)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但它失败了.
我对如下图形感兴趣,最好在直方图上有和没有直线.
.
X轴和Y轴分配有xs和ys的值.
我正在尝试创建Tkinter GUI,并且尝试在画布上放置gif图像时出现属性错误。
canvas_1 = Canvas(width = 800, height = 450, bg = "blue").pack()
gif = PhotoImage(file = "C:\\Users\\Luke\\Desktop\\fb.gif")
canvas_1.create_image(0, 0, image = gif, anchor = NW)
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误
canvas_1.create_image(0, 0, image = gif, anchor = NW)
AttributeError: 'NoneType' object has no attribute 'create_image'
Run Code Online (Sandbox Code Playgroud)
提前致谢。
让我们说我想这样做
hashlibAlgo = "md5"
Hash= hashlib.**"hashlibAlgo"**("blah blah blah").hexdigest()
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点.如果我用字符串替换方法的名称,它显然不起作用.我怎样才能使它工作?在powershell中很简单,但我无法在Python中找到它.
这是一段代码,它进入一个无限递归循环,它只包含__repr__函数,似乎在调用自身.但我真的看不到它是怎么称呼它自己的.而且,我甚至无法理解,它是如何被称为:
class MyList(list): #this is storage for MyDict objects
def __init__(self):
super(MyList, self).__init__()
class MyDict(dict):
def __init__(self, mylist):
self.mylist = mylist #mydict remembers mylist, to which it belongs
def __hash__(self):
return id(self)
def __eq__(self, other):
return self is other
def __repr__(self):
return str(self.mylist.index(self)) #!!!this is the crazy repr, going into recursion
def __str__(self):
return str(self.__repr__())
mylist = MyList()
mydict = MyDict(mylist)
mydict.update({1:2})
print str(mylist.index(mydict)) #here we die :(
Run Code Online (Sandbox Code Playgroud)
执行此代码会导致:
Traceback (most recent call last):
File "test_analogue.py", line 20, …Run Code Online (Sandbox Code Playgroud) 我是Python的新手,而且已经好几年没有使用Linux了,所以我不确定我在哪里纠结。我正在尝试使用Popen在Ubuntu上的MySQL中运行sql文件。
以下是相关代码:
command = ['mysql', '-uUSER', '-pPWD','-h192.168.1.132', '--database=dbName', '<', './1477597236_foo.sql' ]
print("command is: "+subprocess.list2cmdline(command))
proc = subprocess.Popen(
command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd='.'
)
Run Code Online (Sandbox Code Playgroud)
其输出与运行'mysql --help'相同。让我感到困惑的是,如果我接受subprocess.list2cmdline的命令输出并直接运行它,它将运行得很好。另外,如果我替换'< file.sql'为'-e select * from foo',它将运行。因此,'<'和文件导致了我的问题。我知道是什么引起了这个问题,但是到目前为止我还没有尝试过解决问题的方法。
tia,克雷格
python ×10
matplotlib ×2
tkinter ×2
debugging ×1
function ×1
histogram ×1
linegraph ×1
md5 ×1
mysql ×1
popen ×1
properties ×1
recursion ×1
repr ×1
subprocess ×1
substitution ×1