Python 2.7 如何并排使用Tkinter和插座
因此,我编写了一个程序,其目的是从Tkinter GUI接收值,然后将它们从套接字发送到另一台计算机 问题是Tkinter占据了所有的循环。我尝试过使用root.after(),但是socket依赖于.get()函数,因此当调用GUI时,我尝试发送的内容没有任何值 下面是一个更简单的代码示例,说明了我正在尝试做的事情(我的代码要大得多,大约有10个不同的变量要大) 那么我如何让这些都在循环中运行呢?那么它在进行更改时发送数据?(希望每一秒都是我的目标)。我理解在root.after-before-root.mainloop中使用root.after-before的问题,但如果不是这样,它就不会工作。请注意,无论如何,它不会以另一种方式工作 我认为线程和队列可能是唯一的解决方案,但我一直在与这些模块斗争Python 2.7 如何并排使用Tkinter和插座,python-2.7,sockets,loops,tkinter,Python 2.7,Sockets,Loops,Tkinter,因此,我编写了一个程序,其目的是从Tkinter GUI接收值,然后将它们从套接字发送到另一台计算机 问题是Tkinter占据了所有的循环。我尝试过使用root.after(),但是socket依赖于.get()函数,因此当调用GUI时,我尝试发送的内容没有任何值 下面是一个更简单的代码示例,说明了我正在尝试做的事情(我的代码要大得多,大约有10个不同的变量要大) 那么我如何让这些都在循环中运行呢?那么它在进行更改时发送数据?(希望每一秒都是我的目标)。我理解在root.after-before
我需要它不断循环两个程序组件,以便在GUI幻灯片更改时不断发送数据。您的根本问题是
root。在(500,data())
之后,tk计划调用调用数据的结果,即无
。您应该传递函数:root.after(500,data)
。要定期发送,请在conn.sendall
调用之后的data
末尾添加相同的行。要仅在值更改时发送,需要存储“旧”值并进行比较。这些变更包含在以下内容中
from tkinter import *
oldvalue = 60
interval = 500
def data():
global oldvalue
newvalue = str(value.get())
if newvalue != oldvalue:
print(newvalue)
oldvalue = newvalue
root.after(interval, data)
root = Tk()
value = Scale(root, from_=255, to=0)
value.set(oldvalue)
value.pack() #not using pack but grid. Pack is just easier for simple example.
root.after(1, data)
root.mainloop()
请注意,使用print
作为send
的替身,可以更轻松地尝试GUI。这样做表明在移动滑块时将发送中间值。如果这不是你想要的,你会尝试更多。不要在
之后使用,而是将''绑定到
数据'。或轮询并仅在两次获得相同值时发送。或者随便什么。很好地呈现了可能的副本。重复问题中缺少的一点是在函数末尾重新安排自己的时间。data()
。我从那里得到了after函数。我需要不断更新。Msw,你说的数据重新安排本身是什么意思?我认为我没有这样做,这可能是什么影响了它?再看一看用#在2秒内重新安排事件注释的行。这就是你所缺少的。此外,第一个答案不会“闪开”(尽管评分较低的答案会闪开)。
from tkinter import *
oldvalue = 60
interval = 500
def data():
global oldvalue
newvalue = str(value.get())
if newvalue != oldvalue:
print(newvalue)
oldvalue = newvalue
root.after(interval, data)
root = Tk()
value = Scale(root, from_=255, to=0)
value.set(oldvalue)
value.pack() #not using pack but grid. Pack is just easier for simple example.
root.after(1, data)
root.mainloop()