小编Bry*_*ley的帖子

如何使用distutils创建可执行的.zip文件?

如果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在档案的顶部还有一个额外的东西.

python distutils python-2.6

6
推荐指数
1
解决办法
3532
查看次数

ttk 树视图:选定的颜色

我的 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,然后在它未被选中时返回,但这相当不雅。

python treeview tkinter ttk

6
推荐指数
1
解决办法
8546
查看次数

控制台中有多少个字符?

如何使用python找出交互式shell中结束行之前一行中的字符?(通常为 80)

python shell

5
推荐指数
1
解决办法
1664
查看次数

为什么python inspect.isclass认为实例是一个类?

给出以下模块:

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是检查模块眼中的一个类.这是为什么?

python introspection

5
推荐指数
2
解决办法
1533
查看次数

如何将python logger指向Tkinker的Listbox?

我有一个简单的应用程序,其中一个类表示数据结构,一个类用于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窗口.

如何将日志定向到列表框?我希望看到消息填充列表,因为它们被记录而不是显示在控制台或日志文件中.

如何在执行类中的方法时更新列表框?

python logging tkinter

5
推荐指数
1
解决办法
514
查看次数

如何将文本小部件的一部分标记为只读?

如何将 tkinter 文本小部件的一部分标记为只读?也就是说,我希望能够只允许在小部件的某些部分进行编辑。例如,我想只允许在提示之后而不是之前进行编辑,以模拟控制台。

python tkinter text-widget

5
推荐指数
1
解决办法
714
查看次数

奇怪的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',并保持其余部分相同,则保留按钮将使按钮保持蓝色,并且它永远不会是红色.

谁能告诉我发生了什么?

谢谢.

python tkinter

5
推荐指数
1
解决办法
3589
查看次数

tkinter中的AttributeError

我正在尝试用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)

python tkinter

5
推荐指数
1
解决办法
2424
查看次数

Python:函数需要1个位置参数,但是给出了2个,如何?

我用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)

python class tkinter

5
推荐指数
3
解决办法
2万
查看次数

Tkinter:固定尺寸框架中的中心标签?

我正在尝试创建一个固定大小的框架并在中心放置一个文本标签。我不确定为什么这不起作用。我想要主框架左上角的框架,所以指定了 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 tkinter

5
推荐指数
1
解决办法
4万
查看次数