如果我想简单地用语句创建一个 Tkinter GUI,我可以这样做:
from Tkinter import *
root = Tk()
root.title("Test Window")
tkFrame = Frame(root)
tkButton = Button(tkFrame)
[...]
Run Code Online (Sandbox Code Playgroud)
但是,文档建议将 Tkinter 与类定义一起使用,子类化 Frame 小部件:
class App(Frame):
[...]
Run Code Online (Sandbox Code Playgroud)
我想了解为什么会这样。为什么我们不能子类化 Frame 的容器,即窗口?似乎第一个例子中的语句就是这样做的,那么为什么不在类定义中呢?
编辑(按照 Bryan Oakley 的回答):
我想在 Tkinter 的最高级别进行实例化,我假设它是 Tk() (虽然我遇到过说明 Frame 是顶级的引用,但没关系)。实际上,以下将创建一个窗口:
from Tkinter import *
class Application(Tk):
pass
app = Application()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
...但是一旦我尝试添加小部件,我就会收到错误或两个窗口,小部件在一个新窗口中,具体取决于我如何构建代码。这是一个基本示例,它将生成带有按钮的第二个窗口:
from Tkinter import *
class Application(Tk):
tkBtn = Button()
tkBtn.pack()
app = Application()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
使用self、__init__等的任何更多内容都会产生错误。有人可以指出我在最高级别实例化 Tkinter 的工作代码吗?就像Frame我看到的所有子类一样,但在最高级别?
在下面的正则表达式中,我希望字符串中的每个字符都替换为"X",但它不起作用.
在Python 2.7中:
>>> import re
>>> re.sub(u"[a-zA-Z]","X","dfäg")
'XX\xc3\xa4X'
Run Code Online (Sandbox Code Playgroud)
要么
>>> re.sub("[a-zA-Z]","X","dfäg",re.UNICODE)
u'XX\xe4X'
Run Code Online (Sandbox Code Playgroud)
在Python 3.4中:
>>> re.sub("[a-zA-Z]","X","dfäg")
'XXäX'
Run Code Online (Sandbox Code Playgroud)
有可能以某种方式'配置'[a-zA-Z]模式以匹配'ä','ü'等?如果无法做到这一点,我如何在方括号之间创建一个类似的字符范围模式,包括通常的"完整字母"范围内的Unicode字符?我的意思是,例如,在像德语这样的语言中,'ä'将被放置在字母表中靠近'a'的位置,因此可以预期它将包含在'az'范围内.
这似乎是应该有很多重复和大量答案的问题类型,但我的搜索只导致沮丧,没有可用的解决方案。
在 Python(最好是 3.x)中,我想知道如何打开任意类型的文件,读取存储在磁盘上的字节,并以最“原生”、“原始”、“ raw' 形式,在对它们进行任何编码之前。
如果文件作为流存储在磁盘上,00010100 10000100 ...那么这就是我希望在屏幕上显示的内容。
这类问题通常会引起“您为什么想知道”和“用例是什么”的回答。我很好奇,这是我的用例。
在将其标记为重复之前,请确保您想到的答案确实回答了问题(而不仅仅是讨论编码等)。谢谢!
前三个答案后编辑:
感谢到目前为止的三位响应者,特别感谢 JF Sebastian 进行的扩展讨论。从所说的内容看来,我的问题归结为文件中的字节如何物理记录到磁盘以及如何读取和呈现它们。在这一点上,在 Python 中似乎不可能以原始形式获得字节的视图,但它们有各种表示形式;整数、十六进制值、ascii 等。由于问题尚未解决,我将保留问题以供更多输入。