Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何并排使用Tkinter和插座_Python 2.7_Sockets_Loops_Tkinter - Fatal编程技术网

Python 2.7 如何并排使用Tkinter和插座

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

因此,我编写了一个程序,其目的是从Tkinter GUI接收值,然后将它们从套接字发送到另一台计算机

问题是Tkinter占据了所有的循环。我尝试过使用root.after(),但是socket依赖于.get()函数,因此当调用GUI时,我尝试发送的内容没有任何值

下面是一个更简单的代码示例,说明了我正在尝试做的事情(我的代码要大得多,大约有10个不同的变量要大)

那么我如何让这些都在循环中运行呢?那么它在进行更改时发送数据?(希望每一秒都是我的目标)。我理解在root.after-before-root.mainloop中使用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()