Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 在tkinter ScrolledFrame中使用.get()_Python_Tkinter - Fatal编程技术网

Python 在tkinter ScrolledFrame中使用.get()

Python 在tkinter ScrolledFrame中使用.get(),python,tkinter,Python,Tkinter,我正在尝试使用.get()获取par02_1。我已经成功地编写了.txt文件的其余部分,但我的程序没有抓住我的gui输入行。我猜这与关联本身、可滚动部分等有关,但我无法找到这一部分。感谢您的帮助 from tkinter import * from tkinter import ttk import tkinter.messagebox import time root = Tk() # GUI Window root.title("Outfile Automation") # Gui

我正在尝试使用.get()获取par02_1。我已经成功地编写了.txt文件的其余部分,但我的程序没有抓住我的gui输入行。我猜这与关联本身、可滚动部分等有关,但我无法找到这一部分。感谢您的帮助

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time

root = Tk()

# GUI Window
root.title("Outfile Automation")


# Gui Future Menu Logic
def future01():
    print("Future Command 01")


# GUI Main Menu
menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Script...", command=future01)
subMenu.add_separator()
subMenu.add_command(label="Exit Program", command=future01)

helpMenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpMenu, command=future01)
helpMenu.add_command(label="Instruction Manual", command=future01)
helpMenu.add_command(label="Software Version: A0.003")


##Scrollbar

class VerticalScrolledFrame(Frame):
    def __init__(self, parent, *args, **kw):
        Frame.__init__(self, parent, *args, **kw)

        # create a canvas object and a vertical scrollbar for scrolling it
        vscrollbar = Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = Canvas(self, bd=0, highlightthickness=0,
                        yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)

        # reset the view
        canvas.xview_moveto(0)
        canvas.yview_moveto(0)

        # create a frame inside the canvas which will be scrolled with it
        self.interior = interior = Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior,
                                           anchor=NW)

        # track changes to the canvas and frame width and sync them,
        # also updating the scrollbar
        def _configure_interior(event):
            # update the scrollbars to match the size of the inner frame
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the canvas's width to fit the inner frame
                canvas.config(width=interior.winfo_reqwidth())

        interior.bind('<Configure>', _configure_interior)

        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                # update the inner frame's width to fill the canvas
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())

        canvas.bind('<Configure>', _configure_canvas)


if __name__ == "__main__":
    class AutoApp(Tk):
        def __init__(self, *args, **kwargs):
            root = Tk.__init__(self, *args, **kwargs)

            self.frame = VerticalScrolledFrame(root)
            self.frame.pack()
            self.label = Label(text="")
            self.label.pack()

            self.par02_1 = StringVar()

            title_1 = Label(self.frame.interior, text="Device IP (DHCP)", fg="blue", font="Verdana 10 underline")
            title_1.pack()
            label_1 = Label(self.frame.interior, text="Device 01")
            label_1.pack()
            entry_1 = Entry(self.frame.interior, textvariable=self.par02_1)
            entry_1.pack()

            outFile = open('CSC.txt', 'wt')
            outFile.write("[Script Header]\nDebugStrings=on\nAbortOnError=on\nConcurrentSectionLimit=230\n"
                          "//23 Devices if necessary""\n\n[Variables]""\n"
                          + (self.par02_1.get()) + "\n\n"
                          "[Device01]\nConnect=tcp |proc01|\nRunAsSingleTransaction=on\nEthernetDHCPHost "
                          + (self.par02_1.get()) + "EthernetCurrentConnectionInfo\n")

            outFile.close()

            def muser():
                feedback_1 = Label(root, text="Creating Script...").pack()
                feedback_2 = Label(root, text="Script Complete!").pack()
                time.sleep(2)
                return

            # GUI Buttons
            mbutton = Button(root, text="Create Script", command=muser, fg="black", bg='green')
            mbutton.pack()


    app = AutoApp()
    app.mainloop()
从tkinter导入*
从tkinter导入ttk
导入tkinter.messagebox
导入时间
root=Tk()
#图形用户界面窗口
root.title(“输出文件自动化”)
#Gui未来菜单逻辑
def future01():
打印(“未来命令01”)
#GUI主菜单
菜单=菜单(根)
root.config(menu=menu)
子菜单=菜单(菜单)
menu.add_级联(label=“File”,menu=子菜单)
子菜单。添加命令(label=“New Script…”,command=future01)
子菜单。添加_分隔符()
子菜单.添加命令(label=“Exit Program”,command=future01)
帮助菜单=菜单(菜单)
menu.add_级联(label=“Help”,menu=helpMenu,command=future01)
帮助菜单.添加命令(label=“Instruction Manual”,command=future01)
helpMenu.add_命令(label=“软件版本:A0.003”)
##滚动条
类垂直滚动框架(框架):
定义初始值(自、父、*args、**kw):
帧。\uuuuu初始化(自,父,*args,**kw)
#创建画布对象和用于滚动的垂直滚动条
vscrollbar=滚动条(自,方向=垂直)
vscrollbar.pack(填充=Y,侧边=RIGHT,展开=FALSE)
画布=画布(自我,bd=0,highlightthickness=0,
yscrollcommand=vscrollbar.set)
canvas.pack(side=LEFT,fill=BOTH,expand=TRUE)
vscrollbar.config(命令=canvas.yview)
#重置视图
canvas.xview_moveto(0)
canvas.yview_moveto(0)
#在画布内创建一个框架,该框架将与其一起滚动
self.interior=内部=框架(画布)
内部=画布。创建窗口(0,0,窗口=内部,
锚点=西北)
#跟踪画布和帧宽度的更改并同步它们,
#同时更新滚动条
def_配置_内部(事件):
#更新滚动条以匹配内部框架的大小
大小=(interior.winfo_reqwidth(),interior.winfo_reqheight())
canvas.config(scrollregion=“0%s%s”%size)
if interior.winfo_reqwidth()!=canvas.winfo_width():
#更新画布的宽度以适合内部框架
canvas.config(width=interior.winfo_reqwidth())
内部绑定(“”,\u配置\u内部)
定义配置画布(事件):
if interior.winfo_reqwidth()!=canvas.winfo_width():
#更新内部框架的宽度以填充画布
canvas.itemconfigure(interior\u id,width=canvas.winfo\u width())
canvas.bind(“”,\u configure\u canvas)
如果名称=“\uuuuu main\uuuuuuuu”:
自动应用程序(Tk)类:
定义初始化(self,*args,**kwargs):
root=Tk.\uuuu init\uuuu(self,*args,**kwargs)
self.frame=垂直滚动帧(根)
self.frame.pack()
self.label=标签(text=”“)
self.label.pack()
self.par02_1=StringVar()
title_1=标签(self.frame.interior,text=“设备IP(DHCP)”,fg=“蓝色”,font=“Verdana 10下划线”)
标题_1.pack()
标签\u 1=标签(self.frame.interior,text=“设备01”)
标签_1.pack()
entry_1=entry(self.frame.interior,textvariable=self.par02_1)
条目_1.pack()
outFile=open('CSC.txt','wt')
outFile.write(“[Script Header]\nDebugStrings=on\nAbortOnError=on\nConcurrentSectionLimit=230\n”
//23个设备(如有必要)“\n\n[变量]”“\n”
+(self.par02_1.get())+“\n\n”
“[Device01]\nConnect=tcp | proc01 | \nRunAsSingleTransaction=on\nEthernetDHCPHost”
+(self.par02_1.get())+“EthernetCurrentConnectionInfo\n”)
outFile.close()
def muser():
反馈_1=标签(root,text=“创建脚本…”)。pack()
feedback_2=标签(root,text=“Script Complete!”).pack()
时间。睡眠(2)
返回
#GUI按钮
mbutton=按钮(root,text=“创建脚本”,command=muser,fg=“黑色”,bg=“绿色”)
mbutton.pack()
app=AutoApp()
app.mainloop()

您好,谢谢你们两位在我学习正确语法时给予的指导。我还有很长的路要走,但你们都帮我指出了正确的方向,这样我就可以在线获取我的程序。我把它剥离到了最基本的部分,并将在我的实际代码中实现以下体系结构的变体

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time

root = Tk()

# GUI Window
root.title("Outfile Automation")


# Gui Future Menu Logic
def future01():
    print("Future Command 01")


# GUI Main Menu
menu = Menu(root)
root.config(menu=menu)

subMenu = Menu(menu)
menu.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="New Script...", command=future01)
subMenu.add_separator()
subMenu.add_command(label="Exit Program", command=future01)

helpMenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpMenu, command=future01)
helpMenu.add_command(label="Instruction Manual", command=future01)
helpMenu.add_command(label="Software Version: A0.003")

par02_1 = StringVar()

title_1 = Label(root, text="Device IP (DHCP)", fg="blue", font="Verdana 10 underline")
title_1.pack()
label_1 = Label(root, text="Device 01")
label_1.pack()
entry_1 = Entry(root, textvariable=par02_1)
entry_1.pack()


root.mainloop()

template = """[Script Header]\nDebugStrings=on\nAbortOnError=on\nConcurrentSectionLimit=230\n//23 Devices if necessary
                \n\n[Variables]\n{}\n\n[Device01]\nConnect=tcp |proc01|\nRunAsSingleTransaction=on\nEthernetDHCPHost\nEthernetCurrentConnectionInfo\n"""


outFile = open('CSC.txt', 'wt')
outFile.write(template.format(par02_1.get()).rstrip())

outFile.close()

root.mainloop()

您正在尝试在init方法中写出值-不要这样做-您的实例在该点上甚至没有初始化。创建另一个方法(以及调用或运行该方法的方法),在您填写GUI条目后将文件写入。是否有原因将
\u configure\u canvas
\u configure\u interior
muser
缩进一个额外级别,或者这是粘贴代码时的一个错误?很抱歉,很多工作都来自其他联机示例,这是我第一次使用python编程/体验,因此我不确定文件中的所有语法。我知道muser命令必须缩进以显示我希望它在gui中的位置。除了.get()之外,还有其他命令适用于这种情况吗?稍后在gui处理之后,我将尝试内联使用outFile命令,但我不确定.get()是否是正确的调用方法。