【问题标题】:Tkinter showing return from button on main screenTkinter 在主屏幕上显示从按钮返回
【发布时间】:2020-11-19 17:47:48
【问题描述】:

首先对不起英语和代码,我是初学者:) 所以,我坚持的问题是我希望在 tkinter 的屏幕上执行按钮。现在有很多问题,我必须在 PyCharm 的终端上执行。当您尝试使用 Ping 按钮时,它会给您答案,但不会在 gui 屏幕上。这一切都交给了 PyCharm 上的 cmd。其他按钮也有同样的问题。 复选框只是不同代码的一部分。只是暂时可以忽略。 任何建议都会有所帮助。

import tkinter as tk import random import os import subprocess from subprocess import call, Popen, PIPE TYTUL = "Network helper" PRZYCISKI = [ "Ping Google", "Lista kart sieciowych", "Flush DNS", ] # # Ustawiam Tkinter # okno = tk.Tk() okno.title(TYTUL) # # Funkcje # def czysc_ekran(): # Ta funkcja wyczysci pole tekstowe z calego tekstu ekran.delete('1.0', "end") def aktu_ekran(zawartosc): # Ta funkcja wypisuje "zawartosc" w polu tekstowym ekran.insert("end", zawartosc + "\n") def zbierz_zaznaczone(): # Zbiera te wartosci, które zostaly zaznaczone zebrane = [] for x in dic_przyciski.items(): if x[1].get() == True: zebrane.append(x[0]) return zebrane def ping_google(): # Wypisuje w polu tekstowym ping z Google.com #if ping_google(): czysc_ekran() ekran.insert("end", os.system("ping google.com") + "\n") #aktu_ekran(os.system("ping google.com")) #for x in (os.system("ping google.com")): aktu_ekran(x) #else: # aktu_ekran("Brak zaznaczonych miejsc!") #print('Wyszedłeś na świat za pomocą hosta Google') #os.system("ping google.com") def lista_kart(): # Wypisuje w polu tekstowym wszystkie zaznaczone wartosci if zebrana_lista(): czysc_ekran() aktu_ekran(os.system("ifconfig")) for x in zebrana_lista(): aktu_ekran(x) else: aktu_ekran("Brak zaznaczonych miejsc!") def flush_dns(): # Wypisuje w polu tekstowym wszystkie zaznaczone wartosci if flushed_dns(): czysc_ekran() aktu_ekran("Zaznaczone są:") for x in flushed_dns(): aktu_ekran(x) else: aktu_ekran("Brak zaznaczonych miejsc!") # # Ustawiam Framy # frame_l = tk.Frame(okno) frame_l.pack(side = "left", fill = "both") frame_r = tk.Frame(okno) frame_r.pack(side = "right", fill = "both") # # Ustawiam lewy Frame # Lista checkboxów # W tym Frame zastosuje .pack() do organizacji # Slownik dajacy kazdej miejscowce jej wlasne tk.IntVar() dic_przyciski = {} for x in PRZYCISKI: dic_przyciski[x] = tk.IntVar() # Checkboxy for x in dic_przyciski.items(): tk.Checkbutton(frame_l, text = x[0], variable = x[1], anchor = "w").pack(side = "top", fill = "both") # # Ustawiam prawy Frame # Pole tekstowe i przyciski # W tym Frame zastosuje .grid() do organizacji # Pole tekstowe ekran = tk.Text(frame_r, height = 25, width = 40) ekran.grid(row = 0, column=0, columnspan=5) # Przyciski tk.Button(frame_r, text = PRZYCISKI[0], command = lambda:ping_google()).grid(row = 1, column = 0) tk.Button(frame_r,text = PRZYCISKI[1],command= lambda:lista_kart()).grid(row = 1 , column = 1) tk.Button(frame_r,text = PRZYCISKI[2],command= lambda:flush_dns()).grid(row = 1 , column = 2) # # Tkinter mainloop # okno.mainloop()

谢谢

【问题讨论】:

  • 为了将来尝试用英文编写代码,很难通过一个不理解的代码 - cmets、var 名称和打印。如果可能的话,试着翻译一下。
  • 好的,我以后的所有代码都会这样做。需要用英语思考:)
  • @blazejwiecha 我的回答对你有帮助吗?

标签: python button tkinter os.system


【解决方案1】:

在您的ping_google() 方法中,您正在使用os.system,它将运行 ping,在终端上打印结果并返回 0。如果您想在您的 gui 屏幕上打印,那么您需要一个函数来返回平。因此请改用subprocess.run

proc = subprocess.run('ping google.com', capture_output=True, text=True)
ekran.insert("end", proc.stdout + "\n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多