如果zip文件包含__main__.pyzip存档顶部的文件,Python 2.6及更高版本可以直接执行.zip文件.我想利用此功能提供我正在开发的工具的预览版本,除了将.zip文件复制到磁盘之外,不需要用户安装任何东西.有没有标准的方法来创建这样的zip文件?我正在寻找一个适用于python 2.6和python 2.7的解决方案.
理想情况下,我想使用distutils,因为当我想进行正常安装时,我已经使用了distutils.是否有规范的方法来使用(或扩展)distutils来创建这样的.zip文件?
distutils提供了一个sdist命令,它可以创建几乎正确的源分布,但会创建一个有点太深的结构.
例如,我的源代码树如下所示:
my_package/
- setup.py
- src/
- __main__.py
- module1/
- module2/
- module3/
Run Code Online (Sandbox Code Playgroud)
当我这样做时,python setup.py sdist我得到一个具有以下结构的.zip文件:
my_package-0.1.zip
- my_package-0.1/
- README.txt
- PKG_INFO
- src/
- __main__.py
- module1/
- module2/
- module3/
Run Code Online (Sandbox Code Playgroud)
这不可执行,因为__main__.py它不在分发的顶部.实际上我想要的是一个src发行版,它不包括src,但只包含文件src.那个,或者恰恰是什么sdist给了我,但__main__.py在档案的顶部还有一个额外的东西.
我的 ttk 树视图的选定行显示为深蓝色背景,文本为白色。
如果我用标签设置行的颜色,例如:
self.tree.item(item, tags=('oddrow'))
Run Code Online (Sandbox Code Playgroud)
并将标签配置为颜色,例如:
self.tree.tag_configure('oddrow', background='lightgrey')
Run Code Online (Sandbox Code Playgroud)
并选择奇数行,背景颜色不变(保持浅灰色),而文本从黑色变为白色。如何使所选行的背景变为深蓝色,无论该行是否带有颜色标记?
行无标记为黑色显示为黑色,或在深蓝色上选择白色时。
我试过
ttk.Style().configure('Treeview', selectbackground='blue')
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情。
编辑:我想当我选择一个项目时,我可以将它重新标记为 notoddrow,然后在它未被选中时返回,但这相当不雅。
给出以下模块:
class Dummy(dict):
def __init__(self, data):
for key, value in data.iteritems():
self.__setattr__(key, value)
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__=dict.__setitem__
__delattr__=dict.__delitem__
foo=Dummy({"one":1, "two":2})
Run Code Online (Sandbox Code Playgroud)
为什么会foo出现在输出中inspect.getmembers(..., predicate=inspect.isclass)?
$ python2.5
Python 2.5.2 (r252:60911, Aug 28 2008, 13:13:37)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import junk
>>> import inspect
>>> inspect.getmembers(junk, predicate=inspect.isclass)
[('Dummy', <class 'junk.Dummy'>), ('foo', {'two': 2, 'one': 1})]
>>> inspect.isclass(junk.foo)
True
Run Code Online (Sandbox Code Playgroud)
我预计inspect只会返回,Dummy因为这是模块中唯一的类定义.显然,junk.foo是检查模块眼中的一个类.这是为什么?
我有一个简单的应用程序,其中一个类表示数据结构,一个类用于GUI.我在第一堂课中使用了一个记录器:
class A(object):
def __init__(self):
self.logger = logging.getLogger(self.__class__.__name__)
self.logger.info('creating new A object')
Run Code Online (Sandbox Code Playgroud)
等等
GUI包含一个带有Listbox的Tkinter窗口.
如何将日志定向到列表框?我希望看到消息填充列表,因为它们被记录而不是显示在控制台或日志文件中.
如何在执行类中的方法时更新列表框?
如何将 tkinter 文本小部件的一部分标记为只读?也就是说,我希望能够只允许在小部件的某些部分进行编辑。例如,我想只允许在提示之后而不是之前进行编辑,以模拟控制台。
我一直在尝试使用鼠标悬停事件来更改Tkinter中的butten小部件的背景颜色.我在网上得到了一些简单的代码,适用于文本,但颜色不合适.这里是:
from Tkinter import *
root - Tk()
b = Button(root, text='foo')
b.pack()
def enterB(event):
b.configure(text='bar', background='red')
def leaveB(event):
b.configure(text='foo')
b.bind('<Enter>', enterB)
b.bind('<Leave>', leaveB)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
当我将鼠标放在按钮上时,文本会变为"bar",但背景颜色会保持灰色.当我的鼠标离开按钮上方的区域时,背景颜色变为红色,文本变为"foo".这与应该发生的事情相反.
如果我在leaveB函数的b.configure语句中放置background ='blue',并保持其余部分相同,则保留按钮将使按钮保持蓝色,并且它永远不会是红色.
谁能告诉我发生了什么?
谢谢.
我正在尝试用tkinter编写程序.我还没有完成程序,但试图运行它只是为了看看我的窗口看起来如何,我在tkinter中得到一个错误.
我不知道现在该怎么办.谁知道错了什么?
这是消息
Traceback (most recent call last):
File "<string>", line 420, in run_nodebug
File "<module1>", line 53, in <module>
File "<module1>", line 50, in main
File "<module1>", line 23, in __init__
File "C:\Python33\lib\tkinter\__init__.py", line 2110, in __init__
Widget.__init__(self, master, 'button', cnf, kw)
File "C:\Python33\lib\tkinter\__init__.py", line 2036, in __init__
classes = [(k, v) for k, v in cnf.items() if isinstance(k, type)]
AttributeError: 'str' object has no attribute 'items'
import tkinter
import tkinter.messagebox
#---------------------- define GUI class
class CalcMPG:
def __init__(self): …Run Code Online (Sandbox Code Playgroud) 我用Tk在python中创建了一个Sudoku游戏.
我在一个按钮的按键上遇到了关于该功能的错误
from random import randint
from tkinter import *
class sudoku:
global root,result,lb
def __init__(self):
self.aleatoriedade()
for k in range(9):
j=randint(0,80)
x=j//9
y=j-(x*9)
lb[x][y]['text']=result[x][y]
lb[0][0].bind('<KeyPress-2>',self.kk)
#setted this for test
root.mainloop()
def kk(self):
lb[0][0]['text']='2'
def aleatoriedade(self):
for i in range(9):
var=0
while var in result[0]:
var=randint(1,9)
result[0][i]=var
for i in range(1,9):
for j in range(9):
result[i][j]=result[0][field[i][j]-1]
#MAIN()
n = 3
field = [[(i*n + i//n + j) % (n*n) + 1 for j in range(9)]for i in range(9)]
result = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个固定大小的框架并在中心放置一个文本标签。我不确定为什么这不起作用。我想要主框架左上角的框架,所以指定了 NW 并且工作正常。但是改变标签的粘性方向没有任何作用。帮助表示赞赏。
self.f = Frame(self.master,bg="yellow",width=50,height=50)
self.f.grid(row=0,column=0,sticky="NW")
self.f.grid_propagate(0)
self.f.update()
self.l = Label(self.f,text="123",anchor="center",bg="yellow")
self.l.grid(column=0,row=0,sticky="wens")
Run Code Online (Sandbox Code Playgroud) python ×10
tkinter ×7
class ×1
distutils ×1
logging ×1
python-2.6 ×1
shell ×1
text-widget ×1
treeview ×1
ttk ×1