【问题标题】:run commands on a split frame in the main window using tkinter使用 tkinter 在主窗口的拆分框架上运行命令
【发布时间】:2020-09-16 08:52:22
【问题描述】:

我是 tkinter 的新手,到目前为止我已经构建了这个:

import tkinter as tk
import subprocess
import os


def maingui():

    window = tk.Tk()
    window.title("My first GUI")
    #window.state('zoomed')
    window.geometry("700x205")
    window.configure(bg="black")

    frame1 = tk.Frame(window, width=90, bg="orange")
    # frame1.pack(fill=tk.Y, side=tk.LEFT)
    frame1.grid(row=0, column=0)

    frame2 = tk.Frame(window, width=1890, bg="black")
    # frame2.pack(fill=tk.Y, side=tk.RIGHT)
    frame2.grid(row=0, column=1)

    lotomat = tk.Button(frame1, text="  Start\n   Lotomat", padx=10, pady=5, bg="orange", fg="black",
                        relief=tk.GROOVE, command=lambda : startLotomat())
    # lotomat.pack()
    lotomat.grid(row=1, column=0)

    convert = tk.Button(frame1, text="   URL2IP \n on \n   Desktop", padx=10, pady=5, bg="orange", fg="black",
                        relief=tk.GROOVE, command=lambda : startURL2IP())
    # convert.pack()
    convert.grid(row=2, column=0)

    startRps = tk.Button(frame1, text="    Start    \nR.P.S", padx=12, pady=5, bg="orange", fg="black",
                         relief=tk.GROOVE, command=lambda : startRPS())
    # startRps.pack()
    startRps.grid(row=3, column=0)

    endRun = tk.Button(frame1, text="Quit", padx=12, pady=10, bg="orange", fg="black",
                       relief=tk.RIDGE, command=lambda : ending())
    # endRun.pack()
    endRun.grid(row=4, column=0)

    def startLotomat():
        os.system('python lotomat.py')

    def startURL2IP():
        os.system('python urltoipondesktop.py')

    def startRPS():
        os.system('python rockpaperscissors.py')

    def ending():
        exit()

    window.mainloop()

maingui()

每个按钮运行不同的 .py 文件。 如何使用框架分割窗口,使程序在右侧运行? 谢谢!

编辑: 我添加了 GUI 的图片,目标是在黑框上运行左侧菜单按钮。

【问题讨论】:

  • 能否请您发布所有.py 文件?谢谢!
  • 它们有什么关系?他们在环境中工作(Pycharm)
  • 好吧,但是我没有pycharm,你应该放那个标签。
  • 标签已更新,感谢评论
  • 如果您只想捕获控制台输出,最好使用Text 小部件而不是Frame。将os.system(...) 替换为proc = subprocess.run(..., capture_output=True),然后使用textbox.insert(tk.END, proc.stdout.decode()) 将控制台输出放入Text 小部件,其中textboxText 的一个实例。

标签: python windows user-interface tkinter pycharm


【解决方案1】:

根据 acw1668 的评论和大量线程研究,这里是线程解决方案。如此优雅,如此简单!我爱蟒蛇!

def thread_handler(self, host):

    wt = threading.Thread(target=self.write_to_file, args=(host,))
    pt = threading.Thread(target=self.print_to_box, args=(host,))
    dt = threading.Thread(target=self.delete_default_lines, args=())

    wt.start()
    pt.start()
    dt.start()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2017-06-06
    • 2017-03-09
    相关资源
    最近更新 更多