我試圖在PyQt GUI內的行編輯框中輸入文件路徑,然後在該文件上執行功能。我希望這可以在同一個GUI中完成。這甚至有可能嗎?在GUI中的文件路徑中鍵入並使用它在相同的GUI內運行程序
2
A
回答
0
您的代碼需要重新安排才能正常工作。要考慮的主要問題是把工作分成幾部分,每個部分都要做一件事。所以一個方法讀取文件,一個統計的話,一個輸出結果等
這裏就是你們的榜樣與一些意見,其中的變化已經取得了基本的重新寫入:
import sys, os, string
from PyQt4.QtCore import *
from PyQt4.QtGui import *
# move wordcount function into the class
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.setWindowTitle("Word Count GUI")
# use placeholder text
self.lineedit2 = QLineEdit()
self.lineedit2.setPlaceholderText('Enter Filename Here')
self.pbutton2 = QPushButton('Press to Load File')
# use placeholder text
self.lineedit1 = QLineEdit()
self.lineedit1.setPlaceholderText("Enter Word Here")
self.pbutton1 = QPushButton("Press for Count")
self.pbuttonQuit = QPushButton("Exit")
# don't forget the layout...
layout = QVBoxLayout()
layout.addWidget(self.lineedit2)
layout.addWidget(self.pbutton2)
layout.addWidget(self.lineedit1)
layout.addWidget(self.pbutton1)
layout.addWidget(self.pbuttonQuit)
self.setLayout(layout)
self.pbutton2.setFocus()
# use new-style connections
self.pbutton1.clicked.connect(self.button1Pressed)
self.pbutton2.clicked.connect(self.button2Pressed)
# connect to self.close to quit
self.pbuttonQuit.clicked.connect(self.close)
# keep a list of lines
self.lines = []
def wordcount(self, word):
total = 0
# iterate over stored lines
for line in self.lines:
line = line.translate(None, string.punctuation)
line = line.lower()
words = line.split()
if word in words:
total += 1
return total
def button1Pressed(self):
x1 = self.lineedit1.text()
x1 = str(x1).lower()
# use the wordcount method
x2 = self.wordcount(x1)
outtext = str(x1) + " appears " + str(x2) + " times in the file."
self.lineedit1.setText(outtext)
def button2Pressed(self):
# this reads the file and stores the lines
g = str(self.lineedit2.text())
g = os.path.join('/Users/xxx/Documents/Python', g)
try:
with open(g) as stream:
self.lines = stream.readlines()
except EnvironmentError as exception:
print('ERROR: could not read file:')
print(' : %s' % exception)
self.lines = []
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
0
當然,你可以在同一個GUI中完成。如果要防止用戶在加載文件前點擊按鈕pbutton1
,可以將其屬性disabled
設置爲True
,並在文件加載後啓用按鈕(例如,調用button2Pressed
函數時)。我沒有看到你的代碼中的任何文件的加載指令,所以首先要做的,你會被保存在你的對象文件內容,所以在你button2Pressed
你需要的東西,如:
with open(self.lineedit1.text(), 'r') as my_file:
self.file_content = my_file.readlines()
現在,當你有你的文件加載你需要計數的話。 readlines
將文件分割成單獨的線,所以你也必須執行一個循環計算所有的話,那麼在button1Pressed
你可以寫例如:
self.word_counter = 0
for line in self.file_content:
for word in line.split(' ')
if word == self.lineedit2.text():
counter +=1
注意上面的代碼只將您的線條變成文字上一個空格(' '
)。如果您想要刪除逗號和其他符號,請考慮使用regex
。我希望這會給你一個想法。乾杯!
+0
怎麼辦然後我採取button2Pressed並將其輸入到我的函數wordcount?在過去,我使用raw_input命名文件,然後將它連接到我的計算機上的指定文件路徑(請參閱上面代碼中的變量g和f)。我應該從頂部移動我定義的函數並將它們插入按鈕按鈕的函數中? – SepticReVo
相關問題
- 1. 使用tkinter作爲GUI並使用它來運行程序
- 2. 在GUI中運行程序很慢
- 3. 如何在已經運行的GUI應用程序中使用GUI啓動可執行文件
- 4. 使用GUI輸入變量並在Python中運行腳本
- 5. 在Python代碼中使用GUI文本框中的文件路徑
- 6. 允許多個Python GUI同時運行相同的exe文件
- 7. 在linux上運行GUI應用程序,而不顯示gui?
- 8. Powershell的GUI返回文件路徑
- 9. 如何使用不同的用戶運行GUI程序
- 10. 運行git GUI和龜GUI並行
- 11. 在web gui中運行獨立的java應用程序
- 12. X11轉發在Docker中運行的GUI應用程序
- 13. matlab gui - 調用相同的GUI屏幕
- 14. 使用戶輸入自動化GUI GUI應用程序每週運行
- 15. 一個GUI應用程序,它運行在SQL查詢
- 16. 運行,並從GUI
- 17. 如何在GUI程序運行之前閱讀文本文件
- 18. 在wxpython中加載並運行另一個.py文件GUI
- 19. 同時Swing GUI的正在運行的線程運行
- 20. ObjectDisposedException - 在GUI線程中運行秒錶
- 21. Java - 在簡單的GUI銀行程序中運行總計
- 22. 在後臺運行一個gui程序
- 23. 在線運行非GUI Java程序
- 24. 在Powershell中運行遠程GUI應用程序
- 25. 在GUI程序中使用esky?
- 26. 檢查文件名並在文件路徑中使用它?
- 27. 在Python中嵌入C++程序GUI
- 28. 在同步模式下運行Windows GUI應用程序?
- 29. Shell在相同的路徑中顯示相同的文件?
- 30. C#運行過程中我的應用程序的GUI
你可以解釋button2Pressed中的os.path.join嗎?我從來沒有遇到過這個。 另外,是否將文本存儲爲列表,在self.lines = []中,允許程序運行? button2Pressed中的self.lines = []覆蓋方法__init__中的self.lines = [],與wordcount方法中使用的/ new方法相同,對吧? – SepticReVo
(1)Python文檔:[os.path.join](http://docs.python.org/2/library/os.path.html#os.path.join)。 (2)我在發佈之前完全測試了我的代碼,那麼爲什麼不運行它並查看會發生什麼?使用'self.lines'並且擁有類中的所有內容的關鍵是,所有的方法都可以訪問相同的數據。它還允許您在不重新加載的情況下在同一文件上運行多個字數。 – ekhumoro
我確實測試了你的代碼,只是在尋找過程的確認。感謝os.path.join上的鏈接。 – SepticReVo