【发布时间】: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