Kivy无.kv文件词典应用ScrollView失效,无法查看全部文本求助
Kivy词典应用滚动问题修复方案
问题根源
- ScrollView不滚动:Label默认
size_hint_y=1,高度不会随文本内容自动扩展,ScrollView检测不到内容超出自身范围,因此不触发滚动。 - 无效的返回语句:代码中
return scroll_view_E之后的return scroll_view_P永远不会执行,导致葡萄牙语的ScrollView根本不会显示。 - 布局缺失:两个ScrollView需要用容器布局(比如BoxLayout)来同时展示,否则只能显示一个。
修复后的代码
from kivy.app import App from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout from kivy.uix.scrollview import ScrollView class MyApp(App): def build(self): # 创建主布局,垂直排列两个滚动视图 main_layout = BoxLayout(orientation='vertical', size_hint=(1, 1)) # 英文词典滚动视图 scroll_view_E = ScrollView(size_hint=(1, 0.5), size=(400, 400)) label_English = Label( text="Food:\nFood - Comida\nBread - Pan\nTea - Té\nCoffee - Café\nIce coffee - Café con hielo\nWater - Agua\nSparkling water - Agua mineral con gas\nSugar - Azúcar\nSalt - Sal\nOlive oil - Aceite de oliva\nPepper - Pimienta\nWine - Vino\nMilk - Leche\nCheese - Queso\nFish - Pescado\nMeat - Carne\nSpicy - Picante\nChicken - Pollo\nSeafood - Mariscos\nSandwich - Sandwich\nGluten - Gluten\n\nColours:\nGreen - Verde\nYellow - Amarillo\nRed - Rojo\nOrange - Naranja\nBlack - Negro\nWhite - Blanco\nPurple - Morado\nBlue - Azul\nPink - Rosado\n\nPhrases:\nExcuse me - Disculpe/Perdón\nThank you - Gracias\nGood - Bien\nBad - Mal\nNice to meet you - Encantado/a de conocerte\nWhat time is it? - ¿Qué hora es?\nWhere is the bathroom? - ¿Dónde está el baño?\nYou are welcome - De nada\nGood morning - Buenos días\nGood afternoon - Buenas tardes\nGood evening - Buenas noches\nHow are you? - ¿Cómo estás?\nNice to meet you - Encantado/a de conocerte\nMy name is - Mi nombre es\nWhat is your name? - ¿Cuál es tu nombre?\nMy phone number is - Mi número de teléfono es\nWhat is your phone number? - ¿Cuál es tu número de teléfono?\nI need help - Necesito ayuda\nDo you need help? - ¿Necesitas ayuda?\nCan you help me please? - ¿Podrías ayudarme por favor?\nHow do I get to it? - ¿Cómo llegó hasta allí?\nWhere is it? - ¿Dónde está?\nHow do you spell your name? - ¿Cómo se escribe tu nombre?\nI want to drink - Quiero beber\nI want to - Quiero\nI want to eat - Quiero comer\nI am here for - Estoy aquí para\nMore - Más\nLess - Menos\nEnter - Entrar\nExit - Salir\nEntrance - Entrada\nUp - Arriba\nDown - Abajo\nRight - Derecha\nLeft - Izquierda\nBehind - Detrás\nHelp - Ayuda\nI need help - Necesito ayuda\nOr - O\nOther - Otro\nMissing - Faltante\nWith - Con\nWithout - Sin\nI am lost - Estoy perdido\nGive me the bill please - Por favor, déme la cuenta\nGood bye - Adiós\n\nDays:\nMonday - Lunes\nTuesday - Martes\nWednesday - Miércoles\nThursday - Jueves\nFriday - Viernes\nSaturday - Sábado\nSunday - Domingo\n\nTimes:\nWeek - Semana\nMonth - Mes\nYear - Año\nTomorrow - Mañana\nToday - Hoy\nYesterday - Ayer\nMorning - Mañana\nEvening - Noche\nNoon - Mediodía\nAfter noon - Tarde\n\nLanguages:\nEnglish - Inglés\nFrench - Francés\nHebrew - hebreo\nDutch - holandés\nGerman - alemán\nItalian - italiano\nRussian - Ruso\nJapanese - japonés\nMandarin Chinese - mandarín chino\nPortuguese - portugués\nDo you speak___? - Hablas___?\n\nMonths:\nJanuary - enero\nFebruary - febrero\nMarch - marzo\nApril - abril\nMay - mayo\nJune - junio\nJuly - julio\nAugust - agosto\nSeptember - septiembre\nOctober - octubre\nNovember - noviembre\nDecember - Diciembre\n\nDirections:\nNorth - norte\nSouth - sur\nEast - este\nWest - oeste\n", size_hint_y=None, # 取消高度自适应,手动设置 text_size=(380, None), # 限制文本宽度,让内容换行 valign='top' # 文本顶部对齐 ) # 让Label高度匹配文本内容 label_English.bind(texture_size=lambda _, size: setattr(label_English, 'height', size[1])) scroll_view_E.add_widget(label_English) # 葡萄牙语词典滚动视图 scroll_view_P = ScrollView(size_hint=(1, 0.5), size=(400, 400)) label_Portuguese = Label( text="Comida:\nComida - Comida\nPão - Pan\nChá - Té\nCafé - Café\nCafé gelado - Café con hielo\nÁgua - agua\nÁgua com gás - agua mineral con gas\nAçúcar - azúcar\nSal - Sal\nAzeite - Aceite de oliva\nPimenta - Pimenta\nVinho - Vino\nLeite - Leche\nQueijo - Queso\nPeixe - Pescado\nCarne - Carne\nPicante - Picante\nFrango - Pollo\nFrutos do Mar - Mariscos\nSanduíche - Sandwich\nGlúten - Gluten\n\nCores:\nVerde - Verde\nAmarelo - Amarillo\nVermelho - Rojo\nLaranja - Naranja\nPreto - Negro\nBranco - Blanco\nRoxo - Morado\nAzul - Azul\nRosa - Rosa\n\nFrases:\nCom licença - Disculpe/Perdón\nObrigado - gracias\nBom - bien\nRuim - mal\nPrazer em conhecê-lo - Encantado/a de conocerte\n¿Qué horas são? - ¿Qué hora es?\nOnde fica o banheiro? - ¿Dónde está el baño?\nDe nada - De nada\nBom dia - Buenos dias\nBoa tarde - Buenas tardes\nBoa noite - Buenas noches\nComo você está? - Cómo estás?\nPrazer em conhecê-lo - Encantado/a de conocerte\nMeu nome é - Mi nombre es\nQual o seu nome? - Cuál es tu nombre?\nMeu número de telefone é - Mi número de teléfono es\nQual É o Seu Número De Telefone? - ¿Cuál es tu número de teléfono?\nPreciso de ajuda - Necesito ayuda\nVocê precisa de ajuda? - ¿Necesitas ayuda?\nVocê pode me ajudar por favor? - ¿Podrías ayudarme por favor?\nComo faço para chegar a ele? - ¿Cómo llegó hasta allí?\nCadê? - ¿Dónde está?\nComo soletrar o teu nome? - ¿Cómo se escribe tu nombre?\nEu quero beber - Quiero beber\nEu quero - Quiero\nEu quero comer - Quiero comer\nEstou aqui para - Estoy aquí para\nMais - Más\nMenos - menos\nEntrar - Entrar\nSaída - Salir\nEntrada - Entrada\nCima - Arriba\nDown - Abajo\nDireita - Derecha\nEsquerda - Izquierda\nAtrás - Detrás\nAjuda - Ayuda\najuda - ayuda\nOu - O\nOutro - Otro\nFaltando - Faltante\nCom - Con\nSem - sin\nEstou perdido - Estoy perdido\nDê-me a conta, por favor - Por favor, déme la cuenta\nAdeus - Adiós", size_hint_y=None, text_size=(380, None), valign='top' ) label_Portuguese.bind(texture_size=lambda _, size: setattr(label_Portuguese, 'height', size[1])) scroll_view_P.add_widget(label_Portuguese) # 将两个滚动视图添加到主布局 main_layout.add_widget(scroll_view_E) main_layout.add_widget(scroll_view_P) return main_layout if __name__ == "__main__": MyApp().run()
关键修改点
- Label配置:设置
size_hint_y=None,并通过text_size限制宽度,再绑定texture_size让Label高度自动匹配文本长度,这样ScrollView就能识别到内容超出,触发滚动。 - 布局容器:用
BoxLayout垂直排列两个ScrollView,让英文和葡萄牙语词典同时显示。 - 移除无效return:删除第二个永远不会执行的
return scroll_view_P,改为返回包含两个滚动视图的主布局。
内容的提问来源于stack exchange,提问作者Yuval
相关产品推荐
相关产品推荐

