我刚刚开始学习TDD,我正在使用Tkinter GUI开发一个程序.唯一的问题是,一旦.mainloop()调用该方法,测试套件就会挂起,直到窗口关闭.
这是我的代码示例:
# server.py
import Tkinter as tk
class Server(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.mainloop()
Run Code Online (Sandbox Code Playgroud)
# test.py
import unittest
import server
class ServerTestCase(unittest.TestCase):
def testClassSetup(self):
server.Server()
# and of course I can't call any server.whatever functions here
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
测试Tkinter应用程序的适当方法是什么?还是只是'不'?
当尝试使用 Tkinter 标准库包或其相关功能(海龟图形使用turtle和内置 IDLE IDE)或使用将此作为依赖项的第三方库(例如显示使用 Matplotlib 的图形窗口)。
似乎即使不存在因隐藏标准库模块名称而引起的问题(对于尝试遵循教程并使用海龟图形的初学者来说,这是一个常见问题 -示例 1;示例 2;示例 3;示例 4),通常会发生标准库 Tkinter 无法工作的情况。这是一个大问题,因为许多初学者再次尝试遵循使用海龟图形的教程,并盲目地假设turtle标准库将会存在。
可能会报错:
作为ModuleNotFoundError: No module named 'tkinter'; 或ImportError具有相同消息的 ;或使用不同的大小写(我知道名称从Tkinter2.x 更改为tkinter3.x;这是一个不同的问题)。
类似地,但引用内部_tkinter模块,并显示带有注释的代码“如果失败,您的 Python 可能无法配置 Tk”;或者使用自定义错误消息“请安装 python-tk 包”或类似内容。
当尝试turtle专门使用时,出现“没有名为turtle的模块” ,或者上述错误之一。
当尝试使用 Matplotlib 显示绘图时;通常,这种情况会在尝试更改后端后发生,默认设置是为了避免尝试使用 Tkinter。
当 Tkinter 被记录为标准库的一部分时,为什么会出现这样的问题?如何添加或修复缺少的标准库功能?对于特定的 …
我正在努力获取python/tkinter标签小部件来更新其内容.根据今天的早期主题,我按照如何组合小部件的说明进行操作.但是,在运行时,标签小部件不会更改内容,而只是保留其原始内容.据我所知,从来没有调用decrement_widget().有任何想法吗?
def snooze (secs):
"""
Snoozes for the given number of seconds. During the snooze, a progress
dialog is launched notifying the
"""
root = Tkinter.Tk()
prompt = 'hello'
label1 = Tkinter.Label(root, text=prompt, width=len(prompt))
label1.pack()
remaining = secs
def decrement_label ():
text = "Snoozing %d sec(s)" % remaining
remaining -= 1
label1.config(text=text, width=100)
label1.update_idletasks()
for i in range(1, secs + 1):
root.after(i * 1000, decrement_label )
root.after((i+1) * 1000, lambda : root.destroy())
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我通常使用Qt制作我的桌面界面,但最近的一些TK截图让我觉得Tk不仅仅是丑陋的主题了.此外,Tkinter捆绑了Python,这使得分发更容易.
那么值得学习还是我应该坚持使用Qt?
示例tk界面http://www.kb-creative.net/screenshots/ipats-multifile.gif
我想在我的主要Tkinter窗口中嵌入一个终端.我想有一个子窗口,其中一个终端(基于Bash的终端)将运行.我也希望能让我的程序与终端进行交互,至少我想阅读当前的工作目录和/或设置它.
我不知道这是不是真的不可能.我过去能用Perl/Tk做到这一点,所以也许它可以在这里复制.
我之后使用的代码类似于:
$frame3=$mw->Frame(-borderwidth=>2, -relief=>'groove', # -label=>'stuff for thought',
-labelBackground=>CADRAWWINCOLOR,-background=>CADRAWWINCOLOR);
$cv=$frame3->Canvas(-height=>$cvheight,-width=>$cvwidth,-background=>CADRAWWINCOLOR,
-bg => CADRAWWINCOLOR,
-relief => 'sunken')->pack(-expand => 1, -fill => 'both');
# this Frame is needed for including the xterm in Tk::Canvas
my $xtermContainer = $cv->Frame(-container => 1);
my $xtid = $xtermContainer->id();
# converting the id from HEX to decimal as xterm requires a decimal Id
my ($xtId) = sprintf hex $xtid;
my $dcontitem = $cv->createWindow($xtermWidth/2,$xtermHeight/2,
-window => $xtermContainer,
-width => $xtermWidth,
-height => $xtermHeight,
-state => 'normal');
system("xterm …Run Code Online (Sandbox Code Playgroud) import tkinter
class App():
def __init__(self):
self.root = Tkinter.Tk()
button = Tkinter.Button(self.root, text = 'root quit', command=self.quit)
button.pack()
self.root.mainloop()
def quit(self):
self.root.destroy
app = App()
Run Code Online (Sandbox Code Playgroud)
如何使我的quit功能关闭窗口?
我这里有一个很简单的问题.在Tkinter(python)中,我想知道谁使用按钮转到我的应用程序的不同页面,例如注册页面和登录页面.我知道GUI不像网站那样有"页面",我已经看到了几种不同的方式,但是链接到不同页面的最佳方式是什么?
非常感谢你们!
我正在尝试创建两个Label小部件,它们位于我的测试UI的左上角和右上角.问题是小部件粘在一起,我希望它们之间有空间.
在我的研究中,我遇到了使用粘性,padx和pady选项的建议.但无论我传递给.grid()的参数是什么,我似乎都无法在我的小部件之间创建空间.我知道,无论两个小部件之间的列数和行数是多少,如果所述行/列都是空的,那么它就好像它们不存在并且小部件看起来粘在一起.
使用.grid()方法,如何定位小部件以使它们不会粘在一起?
到目前为止,这是我的代码:
#!/usr/bin/python
from Tkinter import *
class MyApp:
def __init__(self, parent):
self.myParent = parent
self.main_container = Frame(parent)
self.main_container.grid(row=0, rowspan=2, column=0, columnspan=4)
self.top_frame = Frame(self.main_container)
self.top_frame.grid(row=0, column=0, columnspan=4)
self.top_left = Frame(self.top_frame)
self.top_left.grid(row=0, column=0, columnspan=2)
self.top_right = Frame(self.top_frame)
self.top_right.grid(row=0, column=2, columnspan=2)
self.bottom_frame = Frame(self.main_container)
self.bottom_frame.grid(row=2, column=0, columnspan=4)
self.top_left_label = Label(self.top_left, text="Top Left")
self.top_left_label.grid(row=0, column=0, sticky='W', padx=2, pady=2)
self.top_right_label = Label(self.top_right, text="Top Right")
self.top_right_label.grid(row=0, column=4, sticky='E', padx=2, pady=2)
self.text_box = Text(self.bottom_frame, height=5, width=40)
self.text_box.grid(row=0, column=0)
root = Tk()
root.title("Test UI") …Run Code Online (Sandbox Code Playgroud) 我使用pyenv使用Ubuntu 13.10和Python 3.3.4 .我使用其他模块没有问题.当我进入python控制台并写入
import tkinter
Run Code Online (Sandbox Code Playgroud)
它输出
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/serdar/.pyenv/versions/3.3.4/lib/python3.3/tkinter/__init__.py", line 40, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named '_tkinter'
Run Code Online (Sandbox Code Playgroud)
我已经安装python3-tk和tk-devel.
我的程序使用一个ttk.Treeview表作为一个表,并用许多数字填充它.
ttk.Treeview当我按下窗口中的按钮时,我想清除它.
有没有一种简单的方法来清除ttk.Treeview?
谢谢.
python ×10
tkinter ×10
installation ×1
python-3.x ×1
qt ×1
tdd ×1
tk-toolkit ×1
treeview ×1
unit-testing ×1