Tkinter GUI显然不适用于Arc…ArcGIS中的GUI还有其他选项吗



我创建了一个python脚本,该脚本基于一组复杂的While/If/Elif/Else循环来验证属性。出于我的目的,我创建了一个while循环,以确保目标行的属性是可接受的输入,然后它遵循矩阵。如果属性不被接受,它应该使用Tkinter创建一个具有接受选项的GUI,然后单击其中一个,它会将其分配给该属性,并沿着矩阵向下继续!!

我对此感到非常兴奋,并把它全部写出来,因为我对自己的编码有信心,并希望它能在第一次运行(多么愚蠢(。但现在是测试它的时候了,瞧,Tkinter在ArcGIS/arcpy中不起作用。。。所以我希望你能建议一条替代路线,使用以下代码:

def assign(value):
    global x 
    x = value
    mGui.destroy()
def gui3(CONVWGID, a, b, c):
    global mGui
    mGui = Tk()
    mGui.geometry("600x50+500+300")
    mGui.title("Attribute Selection Window")
    labeltext = "Please select one of the following attributes to assign to the selected Convwks feature, CONVWGID: " + str(CONVWGID)
    frame1 = Frame(mGui)
    frame1.pack()
    mLabel = Label(frame1, text = labeltext).grid(row=0, column=0)
    frame2 = Frame(mGui)
    frame2.pack()
    mButton = Button(frame2, text = a, command = lambda: assign(a)).grid(row=0, column=0, padx=10)
    mButton = Button(frame2, text = b, command = lambda: assign(b)).grid(row=0, column=1, padx=10)
    mButton = Button(frame2, text = c, command = lambda: assign(c)).grid(row=0, column=2, padx=10)
    mGui.Mainloop()     #FOR WINDOWS ONLY

我想用raw_input((命令代替GUI,但我真的很喜欢GUI的外观和操作方式。。。你有什么建议吗?

我认为正在发生的事情是,它只是跳过了对我的Tkinter gui3((函数的调用,它跳过了assign((函数。然后,在调用完这些之后,我将全局变量"x"分配给属性,但由于x还没有定义,它就停止了。屏幕截图:imgur.com/psLlnUD

我最终得到一个"NameError:全局名称'x'没有定义。"错误

这是实际决策矩阵的第一步:

for row in ucursor:
    while row[0] != "X" or row[0] != "Y" or row[0] != "Z":
        gui3(row[8], "X", "Y", "Z")
        row[0] = x
    if row[0] == "X":
        ...

我一尝试运行您的代码,就在回溯中弹出了答案:AttributeError: '_tkinter.tkapp' object has no attribute 'Mainloop'gui3中未捕获的异常会杀死调用它的代码,并且row[0] = x永远不会执行,即使gui仍然显示,即使可能调用assign。降低'M',(索引8变为1(

for row in (('A', 1), ('X', 2), ('b', 3)):
    if row[0] not in {"X", "Y", "Z"}:
        gui3(row[1], "X", "Y", "Z")
        print( x)

工作良好。

让窗口消失和重新出现在视觉上让我很烦恼。我个人会弹出一个窗口——"验证数据"(行号向上滚动(,并在需要操作时更改内容。

您可以在wxPython中创建GUI窗口,这些窗口在ArcMap中运行并与地图文档交互,但您需要将它们放入ArcMap扩展中,该扩展在ArcMap启动时加载。这需要创建一个wx。加载扩展时应用程序对象ONCE,然后您可以在扩展内的工具栏上制作一个或多个操作按钮、工具或其他组件。wxPython打开的任何GUI窗口都需要使用wx隐藏。使用wx显示(False(和不关闭。Close((或wx。摧毁我在这个论坛上有一篇关于StackOverflow的帖子:

一次成功调用后,使用wxPython重复调用ArcMap Python外接程序失败

https://stackoverflow.com/a/50377929/8766731

ESRI网站上有一个关于如何做到这一点的好视频:

https://www.esri.com/videos/watch?videoid=1229&isLegacy=真正的

这显示了如何构建ArcMap扩展插件、扩展插件中的工具栏和工具栏上的工具。在我的例子中,我在工具栏上放了一个动作按钮,而不是工具,但同样的方法也有效。

相关内容

  • 没有找到相关文章

最新更新