相关疑难解决方法(0)

Tkinter了解mainloop

直到现在,我曾经用以下结束我的Tkiter程序:tk.mainloop()或者什么都不会出现!见例子:

from Tkinter import *
import random
import time

tk = Tk()
tk.title = "Game"
tk.resizable(0,0)
tk.wm_attributes("-topmost", 1)

canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()

class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
        self.canvas.move(self.id, 245, 100)
    def draw(self):
        pass

ball = Ball(canvas, "red")

tk.mainloop()
Run Code Online (Sandbox Code Playgroud)

然而,当尝试下这个程序的下一步(让球随时间移动)时,本书正在阅读,说要做到以下几点.将绘图功能更改为:

def draw(self):
    self.canvas.move(self.id, 0, -1)
Run Code Online (Sandbox Code Playgroud)

并将以下代码添加到我的程序:

while 1:
    ball.draw()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)

但我注意到添加这段代码,使用tk.mainloop()无用,因为即使没有它,一切都会出现!

在这一刻,我应该提到我的书从未谈到tk.mainloop()(也许是因为它使用Python 3)但我学会了它在网上搜索,因为我的程序不能通过复制书的代码工作!

所以我尝试做以下不起作用!

while 1:
    ball.draw()
    tk.mainloop() …
Run Code Online (Sandbox Code Playgroud)

python tkinter

49
推荐指数
2
解决办法
12万
查看次数

获取 tkinter Canvas 的高度/宽度

我已经找这个很久了。在 tkinter 中获取 Canvas 的高度/宽度有这么难吗?我想做这样的事情:

c = Tk.Canvas(self, heigth=12, width=12)
c.create_oval(0, 0, self.height, self.width)
Run Code Online (Sandbox Code Playgroud)

这样我就可以用画布的宽度/高度的周长画一个圆。

为什么我找不到画布的宽度/高度等任何属性? c.winfo_width并且c.winfo_height不起作用,因为这只会给我带来错误。

你能帮助我吗?这真的很烦人,因为即使在构造函数中也有属性heightwidth......

canvas tkinter python-3.x

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

Tkinter只调用after_idle一次

我是Tkinter的新手,所以如果这很容易我道歉,但我已经搜索了几个小时而无法弄明白.我想要做的是在mainloop空闲之后,我总是想调用函数checkForGroupUpdates().当我运行下面的代码时,它只运行一次.我不知道每次主循环空闲时它都会运行.我很感激帮助.

from Tkinter import *
import random

class Network(Frame):  
    """ Implements a stop watch frame widget. """                                                               
    def __init__(self, parent=None, **kw):      
        Frame.__init__(self, parent, kw)
        self.makeWidgets()    

    def makeWidgets(self):                       
        """ Make the time label. """
        self._canvas = Canvas(self, width=600, height=400)
        self._canvas.pack()

    def checkForGroupUpdates(self):
        print "checking"
        h=0
        this=10
        while this>.0001:
            this=random.random()
            print h
            h=h+1
        print "checked"


def main():
    root = Tk()
    nw = Network(root)
    nw.pack(side=TOP)

    root.after_idle(nw.checkForGroupUpdates)
    root.mainloop()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter

4
推荐指数
2
解决办法
8522
查看次数

Python/tkinter:通过一个命令执行两次更改标签

假设我们有三个 tkinter 小部件:一个标签、一个树视图和一个选项菜单(下面将简称为“菜单”)。一旦选择了一个选项,我就成功地使菜单执行了一个功能。简短的函数如下所示:

def data_process():
    # do something takes time
def print_data()
    data_process() # do something takes time too
    # print stuff to treeview
def refresh_table(self, args):
    label['text'] = 'Executing' # change label text to Executing
    print_data()                # a func. which takes time to run
    label['text'] = 'Done'      # change text to Done
label = tk.Label(parent, text = 'ready')
label.pack()
menu = tk.OptionMenu(parent, var, *list, command = lambda _:refresh_table(self, args))
menu.pack()
table = tk.Treeview(parent)
table.pack()
Run Code Online (Sandbox Code Playgroud)

函数print_data将向树视图小部件(表)打印一些内容。标签小部件就像一个状态栏,告诉用户现在发生了什么。所以我尝试做的工作流程是:

  1. 在菜单中选择一个选项并调用refresh_table …

python oop tkinter python-3.x

2
推荐指数
1
解决办法
348
查看次数

标签 统计

tkinter ×4

python ×3

python-3.x ×2

canvas ×1

oop ×1

user-interface ×1