m_image_matching_cotrol.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import os
  2. from import_qt_mode import *
  3. from UI.manual_image_matching.manual_image_matching_main import Ui_Form
  4. from module.view_control.manual_image_matching.m_image_matching_data import MatchingData
  5. from module.view_control.manual_image_matching.goods_art_image_list import GoodsArtImageList
  6. from module.view_control.MineQWidget import MineQWidget, LoadingMask
  7. class MainMatchingWindow(MineQWidget, QWidget):
  8. mask_load_sign = Signal(bool)
  9. def __init__(self, root_path=None):
  10. super().__init__()
  11. self.ui = Ui_Form()
  12. self.ui.setupUi(self)
  13. # 安装事件过滤器
  14. self.installEventFilter(self)
  15. self.ui.splitter.setSizes([900, 450])
  16. # 移除 Qt.WindowStaysOnTopHint 标志以取消置顶
  17. self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)
  18. # 默认最大化显示窗口
  19. self.showMaximized()
  20. self.matching_data = MatchingData()
  21. if not root_path:
  22. # root_path = r"D:\phpstudy_pro\WWW\auto_photo\output\2024-11-18"
  23. root_path = r"D:\MyDocuments\PythonCode\MyPython\red_dragonfly\deal_pics\auto_capture_V2\auto_photo\output\2024-12-20-2 - 副本"
  24. self.root_path = root_path
  25. print(self.size())
  26. # 加载图片
  27. self.state = 0
  28. self.__mask = LoadingMask(self)
  29. self.mask_load_sign.connect(self.mask_load)
  30. self.installEventFilter(self.__mask)
  31. self.__mask.is_end_sign.connect(self.hide_mask)
  32. QTimer.singleShot(1000, self.load_images)
  33. self.ui.select_path.clicked.connect(self.selectPath)
  34. self.show()
  35. def mask_load(self, flag):
  36. print("mask_load")
  37. if flag:
  38. self.__mask.show()
  39. else:
  40. self.__mask.close()
  41. def load_images(self):
  42. self.show_all_goods_list(self.root_path)
  43. def show_all_goods_list(self, root_path):
  44. # for i in self.ui.action_widget_list.findChildren(GoodsArtImageList):
  45. # i.deleteLater()
  46. self.mask_load_sign.emit(True)
  47. for data in self.matching_data.get_all_folder(root_path):
  48. # folder_name = data["folder_name"]
  49. # original_path = data["original_path"]
  50. # cut_out_path = data["cut_out_path"]
  51. goods_art_image_list = GoodsArtImageList(goods_art_no_folder_path=data["goods_art_no_folder_path"],
  52. parent=self.ui.action_widget_list,
  53. windows=self,
  54. label_color = data["label_color"],
  55. )
  56. self.ui.verticalLayout_4.insertWidget(self.ui.verticalLayout_4.count() - 1, goods_art_image_list)
  57. goods_art_image_list.select_clearn_all_sign.connect(self.clearn_all_label_select)
  58. self.mask_load_sign.emit(False)
  59. # 清除所有已选
  60. def clearn_all_label_select(self, original_path):
  61. for goods_art_image_list_item in self.ui.action_widget_list.findChildren(GoodsArtImageList):
  62. goods_art_image_list_item: GoodsArtImageList
  63. if goods_art_image_list_item.original_path != original_path:
  64. if goods_art_image_list_item.has_selected:
  65. goods_art_image_list_item.clearn_all_label_select()
  66. goods_art_image_list_item.has_selected = False
  67. for goods_art_image_list_item in self.ui.action_widget_list_2.findChildren(GoodsArtImageList):
  68. goods_art_image_list_item: GoodsArtImageList
  69. if goods_art_image_list_item.original_path != original_path:
  70. if goods_art_image_list_item.has_selected:
  71. goods_art_image_list_item.clearn_all_label_select()
  72. goods_art_image_list_item.has_selected = False
  73. def selectPath(self):
  74. # a = QMessageBox.question(
  75. # self,
  76. # "继续",
  77. # "如选择的文件夹图片很多,则此处会非常耗时",
  78. # QMessageBox.Yes | QMessageBox.No,
  79. # )
  80. # if a != QMessageBox.Yes:
  81. # return
  82. path = QFileDialog.getExistingDirectory(self, "选择文件夹", "")
  83. if not path:
  84. return
  85. if os.path.isfile(path):
  86. return
  87. _, folder_name = os.path.split(path)
  88. for widget in self.ui.action_widget_list_2.findChildren(GoodsArtImageList):
  89. widget.deleteLater()
  90. self.mask_load_sign.emit(True)
  91. goods_art_image_list = GoodsArtImageList(goods_art_no_folder_path=path,
  92. parent=self.ui.action_widget_list_2,
  93. is_goods_art_no_folder=False,
  94. )
  95. goods_art_image_list.select_clearn_all_sign.connect(self.clearn_all_label_select)
  96. self.ui.verticalLayout_5.insertWidget(self.ui.verticalLayout_5.count() - 1, goods_art_image_list)
  97. self.mask_load_sign.emit(False)
  98. def show_big_image(self, icon):
  99. icon = icon.scaled(self.ui.show_big_image.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
  100. self.ui.show_big_image.setPixmap(icon)
  101. def eventFilter(self, obj, event):
  102. if obj == self and event.type() == QEvent.WindowStateChange:
  103. if self.isMaximized():
  104. print("检测到窗口最大化")
  105. QTimer.singleShot(1000, self.show_again)
  106. return super().eventFilter(obj, event)
  107. def show_again(self, *args):
  108. print("检测到窗口最大化2")
  109. print(self.size())
  110. self.updateGeometry()
  111. # self.resizeEvent(QResizeEvent(self.size(), QSize()))
  112. # self.adjustSize()
  113. self.ui.action_widget_list.updateGeometry()
  114. print(self.size())
  115. for i in self.ui.action_widget_list.findChildren(GoodsArtImageList):
  116. i.repaint()
  117. for i in self.ui.action_widget_list_2.findChildren(GoodsArtImageList):
  118. i.repaint()
  119. def resizeEvent(self, event):
  120. super().resizeEvent(event)
  121. if __name__ == '__main__':
  122. app = QApplication([])
  123. window = MainMatchingWindow()
  124. window.resize(1000, 800)
  125. window.show()
  126. app.exec()