在这里,我使用pyqt4为一种文件处理方法创建了UI。这里使用的OOP概念用于实现。首先使用浏览按钮和插入文本框的路径选择路径
from PyQt4 import QtGui, QtCore
import sys
from PyQt4.QtGui import QLabel, QPixmap
class Second(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Second, self).__init__(parent)
class First(QtGui.QMainWindow):
def __init__(self, parent=None):
super(First, self).__init__(parent)
self.labl = QtGui.QLabel(self)
self.setGeometry(550, 200, 550, 300)
self.setWindowTitle('-VDT')
self.logo=QLabel(self)
self.logo.setPixmap(QPixmap("logo.jpg"))
self.logo.move(130, 30)
self.browse_btn = QtGui.QPushButton('Browse', self)
self.browse_btn.move(430, 110)
self.start_btn = QtGui.QPushButton('Start', self)
self.start_btn.move(150, 200)
self.textbox = QtGui.QLineEdit(self)
self.textbox.move(80, 110)
self.textbox.resize(330, 25)
self.browse_btn.clicked.connect(self.browse)
self.start_btn.clicked.connect(self.start)
self.dialog = Second(self)
def browse(self):
file = str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory"))
self.textbox.setText(file)
def start(self):
# self.dialog.setGeometry(550, 200, 550, 300)
# self.dialog.show()
dir_path= self.textbox.text()
print(dir_path)
self.start_btn.deleteLater()
self.browse_btn.deleteLater()
self.textbox.deleteLater()
self.label1 = QtGui.QLabel(self)
self.label1.setText("Started Processing")
self.label1.move(30, 110)
self.label2 = QtGui.QLabel(self)
self.label2.setText("Total files")
self.label2.move(30, 160)
self.label3 = QtGui.QLabel(self)
self.label3.setText("Processed Files")
self.label3.move(30, 210)
Total_no_of_files= number
self.label4 = QtGui.QLabel(self)
self.label4.setText(Total_no_of_files) #Have to add number of files in the selected folder
self.label4.move(240, 160)
self.label5 = QtGui.QLabel(self)
self.label5.setText(Processed_no_of_files) # Have to add number of files processing, this value will increment from 1 to total number of files
self.label5.move(30, 210) #
def main():
app = QtGui.QApplication(sys.argv)
main = First()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
单击开始按钮时,将使用deletelater()方法删除文本框和按钮。然后我添加了几个标签。以下是问题。
1)显示图像标识的小部分
2)没有显示新添加的标签
3)新添加的label5值必须在for循环中进行处理时进行更改。 (在tkinter中我使用了intvar()和root.update()来执行此操作)
我该如何解决这个问题?
更新我已根据您的答案更改了我的代码,但按钮和文本框未被删除,现在标签与旧按钮和文本框重叠。请参阅以下代码
from PyQt4 import QtGui, QtCore
import sys
import os
from PyQt4.QtGui import QLabel, QPixmap
class Second(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Second, self).__init__(parent)
class First(QtGui.QMainWindow):
def __init__(self, parent=None):
super(First, self).__init__(parent)
self.labl = QtGui.QLabel(self)
self.setGeometry(550, 200, 550, 300)
self.setWindowTitle('-VDT')
self.logo=QLabel(self)
self.logo.setPixmap(QPixmap("logo.jpg"))
self.logo.move(130, 30)
self.logo.setVisible(True)
self.browse_btn = QtGui.QPushButton('Browse', self)
self.browse_btn.move(430, 110)
self.start_btn = QtGui.QPushButton('Start', self)
self.start_btn.move(150, 200)
self.textbox = QtGui.QLineEdit(self)
self.textbox.move(80, 110)
self.textbox.resize(330, 25)
self.browse_btn.clicked.connect(self.browse)
self.start_btn.clicked.connect(self.start)
self.dialog = Second(self)
def browse(self):
file = str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory"))
self.textbox.setText(file)
def start(self):
# self.dialog.setGeometry(550, 200, 550, 300)
# self.dialog.show()
dir_path= self.textbox.text()
print(dir_path)
list_dir = os.listdir(dir_path)
dir_length = len(list_dir)
self.start_btn.deleteLater()
self.browse_btn.deleteLater()
self.textbox.deleteLater()
self.logo.setVisible(True)
self.label1 = QtGui.QLabel(self)
self.label1.setText("Started Processing")
self.label1.move(30, 110)
self.label1.setVisible(True)
self.label2 = QtGui.QLabel(self)
self.label2.setText("Total files")
self.label2.move(30, 160)
self.label2.setVisible(True)
self.label3 = QtGui.QLabel(self)
self.label3.setText("Processed Files")
self.label3.move(30, 210)
self.label3.setVisible(True)
Total_no_of_files= dir_length
self.label4 = QtGui.QLabel(self)
self.label4.setText(str(dir_length)) #Have to add number of files in the selected folder
self.label4.move(240, 160)
self.label4.setVisible(True)
self.label5 = QtGui.QLabel(self)
self.label5.move(240, 210)
self.label5.setVisible(True)
path = dir_path
TEST_IMAGE_PATHS = [f for f in os.listdir(path) if f.endswith('.jpg')]
# print(TEST_IMAGE_PATHS)
Total_No_Files = len(TEST_IMAGE_PATHS)
import cv2
comp_no_files=0
for filename in TEST_IMAGE_PATHS:
image_path= path+'//'+filename
print(image_path)
image = cv2.imread(image_path)
img = cv2.resize(image, (660, 340))
cv2.imshow('Show Image', img)
cv2.waitKey(1)
cv2.destroyAllWindows()
comp_no_files += 1
self.label5.setText(str(comp_no_files))
def main():
app = QtGui.QApplication(sys.argv)
main = First()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
你在每个标签上都有setVisible(True)
。
为什么deleteLater()之后标签不显示?
deleteLater()
对你的问题毫无影响。
在python
中,基本上,在显示之前准备好设置。
setGeometry()
,setPixmap()
,设置.....所有设置。
当父窗口小部件显示时,将显示所有设置。
但是关于问题的标签,窗口已经显示出来了。
所以,你必须明确setVisible(True)
。
也就是说,您在第一次设置标签时,在init构造函数中,标签很快就会显示出来。
我认为python
的基本思想有例外,我不知道除了原因。
1.2由setVisible(True)解决。
问题3,
重要的是衡量目录的数量。
label5问题基本上,setText()
执行一次。我建议您有时在处理某些操作时自定义代码来计算数字,但现在不是时候。因为没有必要这样做。
如果要显示数字的更改,请在序列或时间轴中执行。
如果你的折叠很大,并且你有很多折叠,你可以自然地看到变化的顺序或顺序。
for num in sequence:
label5.setText(str(num))
但是我知道你想要以任何速度显示变化,所以我使用了QTimeLine
从0到dir_length,2000ms,数字将在代码中的QTimeLine.start()
之后更改。
如果计算折叠次数,则以这种方式连接时取决于您。我想我现在不能说清楚了。
我不解释如何在这里做。请添加这些命令。
import os #at the first line of your editor.
-----------------------------
dir_path= self.textbox.text() # under the function of start
print(dir_path)
list_dir = os.listdir(dir_path)
dir_length = len(list_dir)
在我的场合,结果,请尝试这个代码。
更新在我的情况下,它没有问题。完全隐藏按钮和文本框。但在你的情况下,按下开始按钮后它仍然存在。
我试图将你的代码从deleteLater()
更改为setVisible(False)
self.start_btn.setVisible(False
self.browse_btn.setVisible(False)
self.textbox.setVisible(False)
如果你无法解决问题,请给我评论。
import os
from PyQt4.QtGui import QLabel, QPixmap
class Second(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Second, self).__init__(parent)
class First(QtGui.QMainWindow):
def __init__(self, parent=None):
super(First, self).__init__(parent)
self.labl = QtGui.QLabel(self)
self.setGeometry(550, 200, 550, 300)
self.setWindowTitle('-VDT')
self.logo=QLabel(self)
self.logo.setPixmap(QPixmap("logo.jpg"))
self.logo.move(130, 30)
self.logo.setVisible(True)
self.browse_btn = QtGui.QPushButton('Browse', self)
self.browse_btn.move(430, 110)
self.start_btn = QtGui.QPushButton('Start', self)
self.start_btn.move(150, 200)
self.textbox = QtGui.QLineEdit(self)
self.textbox.move(80, 110)
self.textbox.resize(330, 25)
self.browse_btn.clicked.connect(self.browse)
self.start_btn.clicked.connect(self.start)
self.dialog = Second(self)
def browse(self):
file = str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory"))
self.textbox.setText(file)
def start(self):
# self.dialog.setGeometry(550, 200, 550, 300)
# self.dialog.show()
dir_path= self.textbox.text()
print(dir_path)
list_dir = os.listdir(dir_path)
dir_length = len(list_dir)
self.start_btn.setVisible(False)
self.browse_btn.setVisible(False)
self.textbox.setVisible(False)
self.logo.setVisible(True)
self.label1 = QtGui.QLabel(self)
self.label1.setText("Started Processing")
self.label1.move(30, 110)
self.label1.setVisible(True)
self.label2 = QtGui.QLabel(self)
self.label2.setText("Total files")
self.label2.move(30, 160)
self.label2.setVisible(True)
self.label3 = QtGui.QLabel(self)
self.label3.setText("Processed Files")
self.label3.move(30, 210)
self.label3.setVisible(True)
Total_no_of_files= dir_length
self.label4 = QtGui.QLabel(self)
self.label4.setText(str(dir_length)) #Have to add number of files in the selected folder
self.label4.move(240, 160)
self.label4.setVisible(True)
self.label5 = QtGui.QLabel(self)
self.label5.move(240, 210)
self.label5.setVisible(True)
path = dir_path
TEST_IMAGE_PATHS = [f for f in os.listdir(path) if f.endswith('.jpg')]
# print(TEST_IMAGE_PATHS)
Total_No_Files = len(TEST_IMAGE_PATHS)
import cv2
comp_no_files=0
for filename in TEST_IMAGE_PATHS:
image_path= path+'//'+filename
print(image_path)
image = cv2.imread(image_path)
img = cv2.resize(image, (660, 340))
cv2.imshow('Show Image', img)
cv2.waitKey(1)
cv2.destroyAllWindows()
comp_no_files += 1
self.label5.setText(str(comp_no_files))
def main():
app = QtGui.QApplication(sys.argv)
main = First()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
更新处理后的文件后1.是因为我有一个jpg文件。